关于String不可变的问题也看了很多,最近看了一篇讲的非常好的文章,总结如下
所谓的不可变,并非真的不可变String s = "123"; s = "456";
s的值的确变成了"456",但是把"456"赋给s的时候是在内存中创建了一个新的对象
也就是说s指向的是一个新的对象,它的值是456,原来的对象"123"在内存中并没有改变
String内部维护的是一个final字符数组,String类并没有提供更改这个字符数组的方法,
换句话说这个数组一旦被初始化就不能被修改,从这个角度上讲String是不可变的但是
可以通过反射更改这个字符数组的值,所以并非真的不可变
原文链接: