String、StringBuffer、StringBuilder的区别

阅读更多
一、本质区别

1.String 修改的内容不可改变

1.1 String 类不可继承
// final 修饰的类不可继承
public final class String
implements java.io.Serializable, Comparable, CharSequence



1.2 String 修饰的内容不可变
/** The value is used for character storage. */
private final char value[];



2.StringBuffer / StringBuilder 修饰的内容可变更

// 类不可继承
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence

// 类不可继承
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence


// 两者具有相同的抽象父类
abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
// 内容可变
    char value[];
}



二、运行速度

解释:
StringBuilder StringBuffer 减少开辟堆空间的时间,只需new一次,而StringBuffer 线程安全,synchronized 的同时需要消耗时间。
String 常量池的因素,所以在拼接短的字符串,拼接final常量,速度要高于StringBuilder

1.大量字符操作

StringBuilder > StringBuffer > String

使用场景:
  • 在循环中拼接字符串,使用StringBuilder,只需new一次;而String 每执行一次循环,new一次


2.少量字符操作

String > StringBuilder > StringBuffer

使用场景:
  • 拼接常量


三、线程安全

StringBuffer 线程安全
String 内容不可变,线程安全
StringBuilder 线程不安全

继承同一个父类,在实现上,前者使用了 synchronized 修饰

你可能感兴趣的:(String,StringBuffer)