黑马程序员技术交流社区

标题: Person p1 = p2;中p1,p2是一样吗?但是 [打印本页]

作者: m狂崩的猫    时间: 2016-3-23 19:24
标题: Person p1 = p2;中p1,p2是一样吗?但是
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不是应该是一样的吗
作者: as9600    时间: 2016-3-23 20:48
P2是接受的地址,并不是指向的p1
作者: ShallDoll    时间: 2016-3-23 21:46
p2=p1是p2和p1指向了同一地址值,p1=null后,p1没了地址值,但是p2的地址值还是没有改变的
作者: xiaofushen    时间: 2016-3-23 21:55
本帖最后由 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()方法了.
作者: 萌萌的_O30IH    时间: 2016-3-23 22:35
我再想想
作者: 星空下的初吻    时间: 2016-3-23 22:45
p2 接受了p1的地址, 这是两个对象同指一个地址,p1为null了 后 ,p2也跟着没地址了
作者: LLQALLQ    时间: 2016-3-23 23:33
p1和p2的地址是是一样的,但是他们共同拥有一个对象,既然p2用了,p1就为null了
作者: 604840337    时间: 2016-3-23 23:51
p2 =p1 相当于  地址值转换       p1为垃圾了  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2