码迷,mamicode.com
首页 > 其他好文 > 详细

String和StingBuffer,StringBuffer和Stringbuilder的区别

时间:2020-02-10 13:30:29      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:打印   aaa   空间   bbb   buffer   的区别   system   线程安全   out   

1.String和StringBuffer的区别:

String是不可变的,String每次生成一个对象的时候都会开一一块新空间,增加内存开销。例如

public class TestString {
public static void main(String[] args) {
String s= new String("sss");
String s2= new String("sss");
String s3=s+s2;
String s4="ssssss";
String s5="ssssss";
System.out.println(s3);
System.out.println("String值比较");
System.out.println(s==s2);
System.out.println(s3==s4);
System.out.println(s4==s5);

}

}

打印输出

ssssss
String值比较
false
false
true

s和s2,s3和s4都是new 的String对象,值都相同(sss和ssssss)。但是用==比较都显示为false。s4和s5都是用同一个字符串对象“ssssss”指向各自。用==比较都相同。所以说当用String的“+”拼接字符串时其实是先new了一个String对象再指向原来的变量。增大了开销。

 

StringBuffer是一个可变的String对象。不会另外开辟新空间,比较节省内存

public static void main(String[] args) {
StringBuffer sb= new StringBuffer(16);
sb.append("aaa");
System.out.println(sb);
sb.append("bbb");
System.out.println(sb);
}

打印输出

aaa
aaabbb

在需要频繁对一个Sting对象改动内容是最好使用StirngBuffer提高效率。还有一个小诀窍,在new StingBuffer对象时最好提前预测需要使用的字符串对象数量使用函数

new StringBuffer(int capacity)指定数量。StringBuffer默认大小16不够用时会自动扩容。如果事先能够预测指定大小减少自动扩容操作可提高效率。

2.StringBuffer和StringBuilder的区别

他们都是可变的String对象,StringBufffer是线程安全的支持多线程。StringBuilder是线程不安全的单线程。StringBuilder效率更高。在不考虑线程安全的情况下推荐使用StringBuilder

 

String和StingBuffer,StringBuffer和Stringbuilder的区别

标签:打印   aaa   空间   bbb   buffer   的区别   system   线程安全   out   

原文地址:https://www.cnblogs.com/zxacnblogs/p/12290428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!