如果要了解String的不可变性,可以先在jdk1.8中找到String类的部分源码
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
......
}
- String类是由final修饰的,这代表着String类不可被继承,即无法被继承的子类修改
- String类的底层数据结构为char数组,并且该数组被final修饰,也就代表着value[]不可被修改指向其他数组,即String不能被改变
- 因为Java研发者认为共享带来的好处大于可变,所以在String类中没有发现任何一个修改value数组内容的方法