标签:
1.可变与不可变性
String是不可变的,它是由字符数组来保存对象的值,并声明为final类型,所以String对象是不可变字符序列。
private final char value[];
StringBuffer和StringBuilder都是可变的字符序列,它们也是由字符数组保存。
char value[];
2.线程是否安全
String是final类型的,不可变的,所以肯定是线程安全的。
StringBuffer中对方法增加了同步锁或调用的方法增加了同步锁,所以是线程安全的。源码如下:
public synchronized String substring(int start, int end) {
return super.substring(start, end);
}
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
StringBuilder中的方法没有实现同步锁功能,所以是非线程安全的。
3.StringBuffer和StringBuilder的相同点
二者都继承了抽象类AbstractStringBuilder,都继承了定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
抽象类与接口的唯一区别在于:抽象类定义了子类中的一些共用方法,子类中只需添加一些新的操作。接口中只是对常量的定义和方法的声明,子类实现必须实现接口中所有方法。
如果只是单线程建议使用StringBuilder,它的效率高于StringBuffer。
java中String、StringBuffer、StringBuilder的区别
标签:
原文地址:http://www.cnblogs.com/lsj2015/p/4642254.html