我像下面这样创建一个String:
String str="ABC";然后在一个函数里面写:
String temp="DEF";
str=temp;这样赋值的话,应该是把temp的引用赋给str吧?但是temp是局部变量,从函数里出来后应该就不存在了,为什么str的值还能保持“DEF”呢?
String str="ABC";然后在一个函数里面写:
String temp="DEF";
str=temp;这样赋值的话,应该是把temp的引用赋给str吧?但是temp是局部变量,从函数里出来后应该就不存在了,为什么str的值还能保持“DEF”呢?
解决方案 »
- 求高手解决问题
- JSP里的<c:forEach>简单问题请教,谢谢
- 关于对象存储的小问题.
- 各位大虾看看我这个冒泡排序程序(java)错在哪里??
- JOptionPane中的InputDialog!急!
- 访问SQL SERVER数据库
- 如何写判断一个字符串是否符合一个四则运算式的正则表达式
- 抽象类的构造方法能为它的子类做些什么?
- 如何给按钮加上位图?在线等待
- petstore这个例子怎么看呀,感觉没有头绪,好象bea公司打包打的不对呀,都有重复的,请分析过petstore的大侠指点小弟一下。
- 求教,计算器问题!!!
- jdk1.5和jdk1.6以下程序执行结果不一样? hashCode?Collection?
这个是String类的知识 不单单是变量的问题,str和temp同是是String类创建的对象分别存放在堆内存中的两个位置,分别有两个地址值,str=temp;其实是将temp对象的地址赋给了str,所以str句柄就指向了temp的对象.也就是他俩操作的是一个对象.
2、temp 是一个临时的指针 指向 DEF
3、出栈后销毁的是temp 指针,因为temp出栈了
4、DEF 还是在堆上面。
5、DEF 这个字符数组,被str引用着。总之,str 和 temp 都不过是地址,DEF 是内容。
谁知道DEF 的地址,谁就能引用DEF的内容DEF的销毁,由JVM控制。当再没有任何引用指向"DEF"的时候,垃圾回收会回收"DEF"