初学者请教,关于String赋值的困惑
我像下面这样创建一个String:
String str="ABC";
然后在一个函数里面写:
String temp="DEF";
str=temp;
这样赋值的话,应该是把temp的引用赋给str吧?但是temp是局部变量,从函数里出来后应该就不存在了,为什么str的值还能保持“DEF”呢?
------解决方案--------------------1、"DEF" (仅仅是指字符本身) 是在堆上面创建的。可以理解为在堆上分配的字符数组。
2、temp 是一个临时的指针 指向 DEF
3、出栈后销毁的是temp 指针,因为temp出栈了
4、DEF 还是在堆上面。
5、DEF 这个字符数组,被str引用着。
总之,str 和 temp 都不过是地址,DEF 是内容。
谁知道DEF 的地址,谁就能引用DEF的内容
DEF的销毁,由JVM控制。
当再没有任何引用指向"DEF"的时候,垃圾回收会回收"DEF"
------解决方案--------------------