求救:新手关于引用类型的问题

weiqiang1314 2011-01-27 11:42:48
public class suiyi {
public static void main(String[] args) {
UserInfo uInfo=new UserInfo("faf","fffa","fafaf");
change(uInfo);
//if(true){
// uInfo=null;
// }
System.out.println(uInfo.getUnickName());//此时能输出,如果不调用方法改为手动清空对象就报异常
}

public static void change(UserInfo a){
a=null;
}

}

请教高手,为什么调用change(uInfo)后uInfo还存在,而在if中清了后就不存在了。求达人详细解释下这两者的区别,感激不尽
...全文
74 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
不善^ 2011-01-27
  • 打赏
  • 举报
回复
这就好比 你(uInfo)知道你家(UserInfo)地址, 然后你又把你家地址 告诉你的同学A(a),但是 同学A 被你杀了(a=null) 但是你自己还是知道地址的
qybao 2011-01-27
  • 打赏
  • 举报
回复
public static void change(UserInfo a){
a=null; //这里的a和方法外的uInfo是两个变量,他们同时引用一个对象
//a=null是改变了a让a引用null对象,uInfo根本就不受影响
}

//if(true){
// uInfo=null; //这里是直接改变uInfo让uInfo引用null对象,所以后面的代码当然出错了
// }


zn85600301 2011-01-27
  • 打赏
  • 举报
回复
change(uInfo); 里面怎么写的 应该是局部变量作用域的问题吧?
uInfo是new UserInfo("faf","fffa","fafaf")的对象的引用
所以只要你显示的将uInfo =null;将引用重新定向 引用才会改变
weiqiang1314 2011-01-27
  • 打赏
  • 举报
回复
明白了,一直以为形参在方法调用中是不存在的,以为实参传进去后就取代了形参!多想各位了

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧