今天学习String,对String不可变产生疑惑,查资料发现,各个老哥说法都对,但都不到点子上,总结如下:
String s="ssss";
s="aaa";
s发生了改变,为什么说String对象无法被改变?其实这里存在一个误区: s只是一个String对象的引用,并不是对象本身。
对象是在内存中是一块内存区,成员变量越多,这块内存区占的空间越大。
引用只是一个4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象。
也就是说,s只是一个引用,它指向了一个具体的对象,当s=“aaa”; 这句代码执行过之后,又创建了一个新的对象“aaa”, 而引用s重新指向了这个新的对象,原来的对象“ssss”还在内存中存在,并没有改变。
在这里,我们虽然把 s 也叫做字符串变量,但其实他只是一个引用。真正的对象是 new 出来的那块内存。