介绍
这篇文章给大家介绍java中字符串,StringBuilder, StringBuffer三者有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
可变性
首先,字符串是字符串,我们一般这样声明:
String s =,“abc"
字符串类使用被最终修饰的字符数组来存储字符串的内容,它的一大特性就是不可变,怎么理解这个不可变呢?
我们知道,一个类被最终修饰,那么这个类无法被继承,方法也不能被重写,属性也不能改变。
看看这段代码:
String s =,“abc"; s =, s + 1; System.out.print (s),,//,输出:,他们以前>表面上年代的值由abc变成了他们,其实并不是这样,而是在进行+ 1的操作时,重新创建了一个新字符串的对象,并给它赋值为他们。
StringBuilder和StringBuffer这俩货同样用字符数组存字符串,但并没有用最后修饰,因此它们创建的内容的可变的,并不像弦那样创建了一个新的对象。
线程安全性
字符串是常量,自然没有线程不安全的问题,但是StringBuilder和StringBuffer是变量,就需要考虑这个。
我们查看StringBuilder的源码:
, @Override ,public int  compareTo (StringBuilder 另一个),{ return 才能super.compareTo(另一个); ,} ,@Override ,public StringBuilder 附加(Object obj), { return 才能;附加(String.valueOf (obj)); 以前,}>再看看StringBuffer的:
, @Override ,public synchronized  int compareTo (StringBuffer 另一个),{ return 才能super.compareTo(另一个); ,} ,@Override ,public synchronized  int 长度(),{ return 才能;计算; ,} ,@Override ,public synchronized  int 能力(),{ return 才能super.capacity (); 以前,}>发现没有,StringBuffer的每个方法都加了同步同步锁,保证了线程安全,而StringBuilder没加。
性能比较
StringBuilder> StringBuffer>字符串
字符串作为常量,每次更改都创建新对象,性能最低;StringBuilder没有StringBuffer身上的锁,因此性能更好。
java中字符串,StringBuilder, StringBuffer三者有什么区别