String、StringBuffer和StringBuilder的区别
一、 三者的区别
1、String 不可变:有“final”修饰符
private
final char value[];
StringBuffer和StringBuilder可变:
均继承自AbstractStringBuilder类,在AbstractStringBuilder中使用字符数组保存字符串,可变。
char[] value;
2、StringBuffer加锁,所以线程安全,但是效率低
StringBuilder不加锁,所以线程不安全,但是效率高
效率排行榜
StringBuilder >StringBuffer > String
二、 String的特殊性
String str1 ="xiao ming "; // 字符串定义在静态区域。(存放静态成员 static定义的 大小有限)
String str2 = newString( "xiao ming "); // 字符串定义在动态区域即堆内存
——String缓冲池内不存在与其指定值相同的String对象,虚拟机将创建新String对象,存在则直接返回已存在的String对象的引用。
即先在静态区域找是否有值相同的对象,有则直接指向此变量。