[code="java"]
package com;
public class UserTest
{
public static void main(String[] args){
User u = new User("jack");
UserTest ut = new UserTest();
ut.changeUser(u);
System.out.println(u.getName());
}
private void changeUser(User u){
u = new User("tom");
System.out.println(u.getName());
}
}
package com;
public class User
{
public User(String name){
this.name = name;
}
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
}
[/code]
请先思考一下输出的内容。
程序运行的结果是:
tom
jack
我的疑问:为何不是
tom
空
chageUser执行完毕后,User.tom占用内存应该释放。此时U的指针应该执行空。
其实,这个是关于java中传值还是引用的问题
private void changeUser(User u) 传递的是值,也就是u对象指针的一个值,所以你在函数中改变这个值是没有用的,它只是一个u的值的一个副本
// u是指向堆中对象的一个指针值
User u = new User("jack");
// u的值被复制一份,传递给方法中的参数
private void changeUser(User u){
// u的副本值被改变,但是并不影响u本身的值
u = new User("tom");
System.out.println(u.getName());
}
在java中一切都是值传递
对象存储在堆中,
USer u 变量指向了两个对象
我想在changeUser方法域中指向 tom对象 ,释放的问题请查 java CG :D