String 、 StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?

【CSDN】String、StringBuffer、StringBuilder的区别——(详细叙述)

【知乎】如何理解 String 类型值的不可变?

String 、 StringBuffer 和 StringBuilder 的区别

StringStringBufferStringBuilder
执行速度最差其次最高
线程安全线程安全线程安全线程不安全
使用场景少量字符串操作多线程环境下的大量操作单线程环境下的大量操作

String 为什么是不可变的?


public final class String implements java.io.Serializable, Comparable<String>, CharSequence,Constable, ConstantDesc {
private final byte[] value;
//...
}
  • String 类被 final 修饰导致其不能被继承,进而避免了子类破坏 String 不可变
  • 保存字符串的数组被 final 修饰且为私有的,并且String 类没有提供/暴露修改这个字符串的方法