A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Person类已定义,其中定义了eat()方法
               Person p1 = new Person();
                Person p2 = p1;
                p2.eat();
                p1 = null;
                p2.eat();
如果这样p2.eat()可以有值但是
                p2.eat();
                p1 = null;
                p1.eat();就没址了
但是p1,p2不是应该是一样的吗

7 个回复

正序浏览
p2 =p1 相当于  地址值转换       p1为垃圾了  
回复 使用道具 举报
p1和p2的地址是是一样的,但是他们共同拥有一个对象,既然p2用了,p1就为null了
回复 使用道具 举报
p2 接受了p1的地址, 这是两个对象同指一个地址,p1为null了 后 ,p2也跟着没地址了
回复 使用道具 举报
我再想想
回复 使用道具 举报
本帖最后由 xiaofushen 于 2016-3-23 21:56 编辑

楼上正解,栈中p1=null后,就不指向堆内存中的new Person()了,但是之前Person p2 = p1;p1把new Person()的地址给了p2,p2依然指向new Person(),所以p2.eat()可以调用其eat ()方法,但是p1=null已经清空地址,不再指向new Person(), 那么p1就调用不了其eat()方法了.

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 赞一个!

查看全部评分

回复 使用道具 举报
p2=p1是p2和p1指向了同一地址值,p1=null后,p1没了地址值,但是p2的地址值还是没有改变的

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 淡定

查看全部评分

回复 使用道具 举报
P2是接受的地址,并不是指向的p1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马