JAVA String 不可变性

jdk String 的底层实现基于 char 数组,String 类定义了一个 final 修饰的私有 char 类型数组,用于保存字符串。final 关键字修饰成员变量说明这个变量不可变,但是对于数组来说,final 修饰只能保证该指向数组首地址的变量值不可变,但是不能保证数组内容不可变,因此 String 的不可变性和 char 数组的 final 关键字并没有直接关系。那到底 String 如何维持其不可变性的呢?
事实上,对于这个私有的 char 数组,String 并没有提供任何一个 public 方法直接修改该数组内容,也就是外部调用无法改变 char 数组的内容,所有修改 String 的 public 方法最终都返回了一个新的 String,这就是为什么 String 不可变的真正原因。

猜你喜欢

转载自gaulle.iteye.com/blog/2380030