首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

String、StringBuffer、StringBuilder的差异

2013-01-26 
String、StringBuffer、StringBuilder的区别//调用父类的append方法,没有使用synchronized增加同步功能publi

String、StringBuffer、StringBuilder的区别
//调用父类的append方法,没有使用synchronized增加同步功能public synchronized StringBuffer append(char str[], int offset, int len) { //调用父类的append方法 super.append(str, offset, len); //返回自身的引用,产生指针逃逸,灵活但不安全,依赖使用者 return this;}

? ? ? ? ?特性分析完成后,在使用这三个类时,就可以针对不同的使用环境,做出合理的选择。下面以字符串拼接为例,来分析一下三个类的使用情况:

? ? ? ? 1)单线程环境下,不用考虑线程安全问题,就执行效率而言,StringBuilder无疑使最好的,因为与StringBuilder相比,StringBuffer有synchronized同步锁,增加了开销,String对自身做出了保护性拷贝,大量的增加了开销,所以选择的优先级别为:StringBuilder > StringBuffer > String。但是有些时候我们要拼接一些常量字符串(可能是因为字符串太长而分行进行拼接),比如“123”+ “abc”+ “456”,可以直接使用String str = “123”+ “abc”+ “456”,因为JVM在编译此代码时直接将其优化成为“123abc456”放在字节码文件的常量池区域,使用时直接load到内存不需要做计算。

? ? ? ? 2)多线程环境下,要考虑线程安全问题,不过这个也得看具体情况,就线程安全的级别而言,三个类的level为:String > StringBuffer > StringBuilder,为什么上面已经分析过了。如何选择呢,这个就得分具体情况了,以下列出了几种常用场景:

? ? ? ? a.如果对线程安全问题一无所知,请使用String,这可以确保你可以无脑的使用并且程序不会出现问题,如果实在对执行效率有要求,就去学习以下多线程编程基础知识,安全的去使用StringBuffer。

? ? ? ? b.对执行效率有要求,比如程序中存在大量的字符串的拼接,如果需要方法同步优先使用StringBuffer,不需要方法同步优先使用StringBuilder。

?

?

热点排行