String、StringBuffer、StringBuilder区别
速度和效率:String>StringBuilder>StringBuffer;
String是不可变(immutable)对象,不可改变其内容,每次改变时都是创建一个新的Stringbuilder对象,在Stringbuilder上对旧String进行改变后,利用toString()方法转化为String,然后返回这个新对象引用,原来的对象没有任何改变,等于是新创建了个String对象。
StringBuilder和StringBuffer是可变对象。StringBuffer是线程安全的,所以效率要低些。
在三者的选择上,如果要频繁更改String内容,如果只是简单的拼接之类的,可以信赖编译器,直接试用String,但是在复杂的比如循环结构下改变String内容,建议试用StringBuffer和StringBuilder。它们二者的区别主要是线程安全。如果是单线程使用StringBuilder会获得更高的效率,如果是多线程,选择线程安全的StringBuffer。
特别应该指出的是。String s = "a"+"b"+"c";jvm会认为String s = "abc";