String类型值不可变的原因
先看底层(1.8为例)
public final class String
implements java.io.Serializable, Comparable, CharSequence
private final byte[] value;
误区:不能修改的原因是因为final关键字修饰了value数组。final修饰value数组只能说明value所指的引用地址不可修改,数组对应堆中的内容是可以变的
例如:
final int[] array = {1, 2};
int[] test = {1, 2, 3};
array = test //error
array[0] = 2; //ok
// {2, 2}
真实原因:
- private修饰,没有暴露可以修改的方法
- final修饰String类,禁止继承该类