文章目录
  1. 1. Java基础知识
    1. 1.1. String、StringBuilder和StringBuffer有什么区别

Java基础知识


String、StringBuilder和StringBuffer有什么区别

Java语言中有4个类可以对字符或字符串进行操作,它们分别是Character、String、StringBuffer和StringTokenizer,其中Character用于单个字符操作,String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringBuffer属于可变类。

String是不可变类,也就是说,String对象一旦被创建,其值将不能被改变,而StringBuffer是可变类,当对象被创建后任然可以对其值进行修改。由于String是不可变类,因此适合在需要被共享的场合中使用,而当一个字符串经常需要被修改时,最好使用StringBuffer来实现,因为在字符串被修改时String会比StringBuffer多很多附加操作,同时生成很多无用的对象,由于遮羞无用的对象会被GC,故影响程序性能。实例如下:

String s = "Hello;
s += "World";

以上代码等同于:

StringBuffer sb = new StringBuffer();
s.append("World);
s = sb.toString(); 

String与StringBuffer还有一个区别就是在实例化String时,可以利用构造函数来new,也可以用赋值(String = “Hello”)的方式,而StringBuffer只能用构造函数的方式。

StringBuilder与StringBuffer类似,都是字符串缓冲区,但StringBuider是线程不安全的,但若只在单线程中使用,则效率高于StringBuffer。

在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。因此,在实际使用时,如果要操作的数据量比较小的,应优先使用String类;如果在单线程下操作大量数据,应优先使用StringBuilder类;如果在多线程下操作大量数据,应优先考虑StringBuffer类。

文章目录
  1. 1. Java基础知识
    1. 1.1. String、StringBuilder和StringBuffer有什么区别