java中字符串,StringBuilder, StringBuffer三者有什么区别

  介绍

这篇文章给大家介绍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三者有什么区别