一、StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。
StringBuffer和StringBuilder类的原理和操作基本相同,区别在于
StringBuffer支持并发操作,线性安全的,适合多线程中使用。
StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。
二、PS:
String s1 = "zm";
String s2 = new String("zm");
String s3 = s2;
则:
s1 == s2 //false
s1 == s3 //false
s2 == s3 //true
对于String,== 比较的是数值;即比较地址;
s1.equals(s2) //true
s1.equals(s3) //true
s2.equals(s3) //true
equals()方法是将内容进行比较;
三、String s1 = "zm"和String s2 = new String("zm")区别:
String s1 = "zm":在堆里面建立了一个对象,若是堆里面已经有“zm”这个字符串,就直接指向这个对象,而不用新建;
String s2 = new String("zm"):一定会在堆里面建立一个对象;
ps:每一个字符串就是一个String类的匿名对象,任何对String对象的改动都会重新生成一个对象,如:
String str = "zm";
str = str + "lc";
这其实生成了3个对象:"zm"/"lc"/"zmlc".
若需要对String进行改动,可以使用StringBuffer和Stringbuilder,区别如上所示。