BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #53313同步于 2016/9/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

小白求问对象引用的问题

czt418022249
2016/9/28镜像同步14 回复
------------------已解决,第一次在论坛发关于技术的帖子,惭愧TAT,还是母校的byr给力----------------- 初学java遇到的问题没想明白,求助万能的论坛: public void moveCircle(Circle circle, int deltaX, int deltaY){ //code to move origin of circle to x+deltaX, y+deltaY circle.setX(circle.getX() + deltaX); circle.setY(circle.getY() + deltaY); //code to assign a new reference to circle circle = new Circle(0,0); } moveCircle(myCircle,23,56); ppt里的一个例子,说是执行完成后myCircle被移动了(23,56) 疑问1:高亮一行为何不会对myCircle造成影响? 疑问2:若改为 public void moveCircle(Circle circle, int deltaX, int deltaY){ //code to assign a new reference to circle circle = new Circle(0,0); //code to move origin of circle to x+deltaX, y+deltaY circle.setX(circle.getX() + deltaX); circle.setY(circle.getY() + deltaY); } moveCircle(myCircle,23,56); 此时结果与前面代码是否相同?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
rythmewoo机器人#1 · 2016/9/28
至少得把Circle实现贴出来吧
chenxiansf机器人#2 · 2016/9/28
因为形参复制了引用,形参指向另一个新对象不影响实参指向原对象
haowen335机器人#3 · 2016/9/29
mayuyu好评
dxy1机器人#4 · 2016/9/29
【 在 czt418022249 的大作中提到: 】 : 初学java遇到的问题没想明白,求助万能的论坛: : public void moveCircle(Circle circle, int deltaX, int deltaY){ : //code to move origin of circle to x+deltaX, y+deltaY : ................... 楼主可以看下《java疯狂讲义》,或者搜下java实参传递给形参的例子
czt418022249机器人#5 · 2016/9/29
ppt里也没给,估计就是一个举例吧 【 在 rythmewoo 的大作中提到: 】 : 至少得把Circle实现贴出来吧
CharlseC机器人#6 · 2016/9/29
java里类变量里储存的是类实例的引用,可以类比c++的指针。 在第一段代码里,把类的引用作为参数传进来,通过引用操作外面的Circle实例,所以前两行代码是有效的。 第三行new了一个新的Circle实例并使局部变量circle指向它。函数运行结束后,局部变量circle被清理,你new出来的新实例也会因为没有引用计数被java内存回收机制清理。 在第二段代码里,第一行就把circle的指向由外部Circle实例改为new出来的新实例。 所以后两行都是对这个新实例进行操作,然后在函数运行结束之后被清理,外面的那个Circle实例没有任何改变。 理解这个问题的前提是要理解java的类引用机制。
iamswf机器人#7 · 2016/9/29
【 在 czt418022249 的大作中提到: 】 : 初学java遇到的问题没想明白,求助万能的论坛: : public void moveCircle(Circle circle, int deltaX, int deltaY){ : //code to move origin of circle to x+deltaX, y+deltaY : ................... moveCircle里面的形参circle本来遥控(指向)电视A(传进来的圆),还没换台(移动偏移量),你就把他的控制芯片重新烧制,变成遥控(指向)电视机B(new出来的圆)了,你说你的遥控器还能不能控制电视机A了。。
czt418022249机器人#8 · 2016/9/29
遇到司机了 【 在 haowen335 的大作中提到: 】 : mayuyu好评
czt418022249机器人#9 · 2016/9/29
多谢 【 在 CharlseC 的大作中提到: 】 : java里类变量里储存的是类实例的引用,可以类比c++的指针。 : 在第一段代码里,把类的引用作为参数传进来,通过引用操作外面的Circle实例,所以前两行代码是有效的。 : 第三行new了一个新的Circle实例并使局部变量circle指向它。函数运行结束后,局部变量circle被清理,你new出来的新实例也会因为没有引用计数被java内存回收机制清理。 : ...................