String和StingBuffer,StringBuffer和Stringbuilder的区别
Posted zxacnblogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String和StingBuffer,StringBuffer和Stringbuilder的区别相关的知识,希望对你有一定的参考价值。
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的区别的主要内容,如果未能解决你的问题,请参考以下文章