String是不可变的

今天学习String,对String不可变产生疑惑,查资料发现,各个老哥说法都对,但都不到点子上,总结如下:

String s="ssss";

s="aaa";

 s发生了改变,为什么说String对象无法被改变?其实这里存在一个误区: s只是一个String对象的引用,并不是对象本身。

对象是在内存中是一块内存区,成员变量越多,这块内存区占的空间越大。

引用只是一个4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象。

也就是说,s只是一个引用,它指向了一个具体的对象,当s=“aaa”; 这句代码执行过之后,又创建了一个新的对象“aaa”, 而引用s重新指向了这个新的对象,原来的对象“ssss”还在内存中存在,并没有改变。

在这里,我们虽然把 s 也叫做字符串变量,但其实他只是一个引用。真正的对象是   new 出来的那块内存。

猜你喜欢

转载自blog.csdn.net/qq_30249871/article/details/100701089