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的区别的主要内容,如果未能解决你的问题,请参考以下文章

StringBuffer-StringBuilder概述

在JS中String 和string啥区别?

C#中string()和ToString()有啥区别?

TypeScript 基础 — string 和 String 的区别

C#中String和string有啥区别?

C#中string和String的区别