非可变对象一旦创建之后就不能再被改变,可变对象则可以在创建之后被改变。
String对象是非可变对象,StringBuffer对象则是可变对象。
你可以通过StringBuffer的构造函数来设定它的初始化容量,这样可以明显地提升性能。这里提到的构造函数是StringBuffer
(int length),length参数表示当前的StringBuffer能保持的字符数量。你也可以使用ensureCapacity (int
minimumcapacity)方法在StringBuffer对象创建之后设置它的容量。首先我们看看StringBuffer的缺省行为,然后再找
出一条更好的提升性能的途径。
StringBuffer的缺省行为:
StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候,因为没有设置初始化字符长
度,StringBuffer的容量被初始化为
16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值
+2)。
如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第16个字符的时候它会将容量增加到34(2*16+2),当追加到
34个字符的时候就会将容量增加到70(2*34+2)。无论何事只要StringBuffer到达它的最大容量它就不得不创建一个新的字符数组然后重新
将旧字符和新字符都拷贝一遍——这也太昂贵了点。所以总是给StringBuffer设置一个合理的初始化容量值是错不了的,这样会带来立竿见影的性能增
益。
关键点
1. 无论何时只要可能的话使用字符串字面量来常见字符串而不是使用new关键字来创建字符串。
2. 无论何时当你要使用new关键字来创建很多内容重复的字符串的话,请使用String.intern()方法。
3. +操作符会为字符串连接提供最佳的性能——当字符串是在编译期决定的时候。
4. 如果字符串在运行期决定,使用一个合适的初期容量值初始化的StringBuffer会为字符串连接提供最佳的性能。
如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法好了!也许这就是你的程序的性能瓶颈!
相关推荐
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候...
从非常细致的角度分析了String和Stringbuffer的主要区别
string和StringBuffer的区别
String的效率低于StringBuffer,开发时最好选用StringBuffer。
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍针对String的详细介绍...
java面试笔试题String 和StringBuffer的区别
String和StringBuffer深入.doc
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
String ,StringBuffer与StringBuilder的区别
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
介绍了String、StringBuffer、StringBuilder的使用方法,以及理论知识
能更好的利用String和StringBuffer
Java中String和StringBuffer的区别
String及StringBuffer和StringBuilder的区别
JAVA中String与StringBuffer的区别 JAVA中String与StringBuffer的区别 自己的学习笔记总结
主要介绍了java中 String和StringBuffer的区别实例详解的相关资料,一个小的例子,来测试String和StringBuffer在时间和空间使用上的差别,需要的朋友可以参考下
对于新手来说,可以大大区别。 对于老手来说,可以清晰思维。 它包含很多细节问题和注意题,总结是高效的,也是一种精髓。
使用字符串字面量而不是使用new关键字来创建字符串。 大多数情况下字符串是在运行期决定的,使用一个合适的初期容量值初始化的StringBuffer会为字符串连接提供最佳的性能。
StringBuffer和String_区别 java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的...