欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

String、StringBuffer、StringBuilder的区别

程序员文章站 2022-04-23 14:10:13
...
一、本质区别

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

1.1 String 类不可继承
// final 修饰的类不可继承
public final class String
implements java.io.Serializable, Comparable<String>, 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