java.lang.String类表示字符串常亮,所谓字符串,就是一组字符组成的字符集合。它有以下几个特点:
String是不可变的对象
每次对String进行改变的时候,其实都等同于生成了一个新的String对象,然后将指针指向新的String对象(若不使用new构造,实际是从堆中的String池查找是否已经再存该字符串,若有则直接指向;若没有则先将该字符串放入String池,然后在指向)。
所以经常改变内容的字符串最好不要用String ,每次生成对象都会对系统性能产生影响(特别当堆中无引用对象多了以后,JVM的垃圾回收GC就会开始工作,性能会受影响)。
了解垃圾回收看这里:[java垃圾回收机制是什么][2]
了解String在内存中如何储存看这里:String在内存中如何存放
String与StringBuffer效率比较
而在某些特别情况下,String对象的改变速度并不会比StringBuffer对象慢,而特别是以下的字符串对象生成中,String效率是远要比StringBuffer快的:
String s1 = "hello " + "world" ;
StringBuffer sb = new StringBuffer( "hello " ) . append( "world" );
你会惊讶的发现,生成String对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。
其实这是JVM的一个把戏,在JVM眼里,这个
String s1 = "hello " + "world" ;
等效于:
String s1 = "hello world" ;
所以不需要太多的时间了。但这里要注意,如果你的字符串是来自其他String对象的话,这时候JVM会规规矩矩创建若干对象,例如:
String s2 = "hello " ;
String s3 = "world" ;
String s1 = "hello world" ;
String还有两个类似的常用类,StringBuffer/StringBuilder,了解他们的使用和区别看这里:StringBuffer/StringBuilder有什么区别
原文:http://blog.csdn.net/ooppookid/article/details/51473710