我们在学习java基础时,都知道java源码类String是final类代表字符串,是字符串常量,根据常量的定义,一旦定义后值是不可变的,所以它是不可变对象,一旦被创建以后,就不能修改它的值。
那么我们在开发代码时,将之前定义好的字符串重新赋值后,你会发现字符串值确实发生了变化。
例如
输出的结果却是这样
可以看到s这个字符串值发生了改变。
那么从结果上看值是改变了,但为什么说String字符串对象是不可变的呢?
原因在于例子中的字符串s只是一个 String 对象的引用,并不是对象本身,当执行 s = “123”; 创建了一个新的对象 “123”,而原来的 “abc” 还存在于内存中,所以只是s的引用地址发生了变化。
所以对于已经存在的String字符串对象的值进行修改都是重新创建一个新的对象,然后把新的值保存进去。这就是上面为什么字符串s的值改变的原因。