String StringBuffer StringBuilder的区别

来源:互联网 发布:越南看中国综艺 知乎 编辑:程序博客网 时间:2024/06/10 07:04

不需要过场,就开门见山吧。

String

String是不可变的(immutable),一旦String对象被创建,它的值就不会改变。

直接上代码

public class main {/** * @param args */public static void main(String[] args) {String a = "hello";//对象a初始化String b = a;//将a赋值给bSystem.out.println("a = " + a);System.out.println("b = " + b);a = "world";//改变a的值System.out.println("a = " + a);System.out.println("b = " + b);}}


输出:

a = hellob = helloa = worldb = hello

可见给对象a的赋值,是重新new出来一个对象。不可变的字符串具有一个优势就是编译器可以把这些字符串设为共享的。缺点是在需要频繁进行String "+" 操作时,会new出很多String对象,这会影响性能。这时候就需要使用StringBuffer。

StringBuffer

StringBuffer是可变的。上代码,上真相。

public class main {/** * @param args */public static void main(String[] args) {StringBuffer buffer1 = new StringBuffer();buffer1.append("hello");StringBuffer buffer2 = buffer1;System.out.println("buffer1 = " + buffer1);System.out.println("buffer2 = " + buffer2);buffer1.append("world");System.out.println("buffer1 = " + buffer1);System.out.println("buffer2 = " + buffer2);}}

输出:

buffer1 = hellobuffer2 = hellobuffer1 = helloworldbuffer2 = helloworld

StringBuilder

StringBuilder不是线程安全的,而StringBuffer是线程安全的,所以在多线程中需要使用StringBuffer,而单线程中使用StringBuilder更好,它不需要考虑同步问题。StringBuilder是从1.5开始支持的这里,而StringBuffer这里和String这里是从1.0就开始支持了。

原创粉丝点击