返回信息流------------------已解决,第一次在论坛发关于技术的帖子,惭愧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);
此时结果与前面代码是否相同?
这是一条镜像帖。来源:北邮人论坛 / java / #53313同步于 2016/9/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
小白求问对象引用的问题
czt418022249
2016/9/28镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 czt418022249 的大作中提到: 】
: 初学java遇到的问题没想明白,求助万能的论坛:
: public void moveCircle(Circle circle, int deltaX, int deltaY){
: //code to move origin of circle to x+deltaX, y+deltaY
: ...................
楼主可以看下《java疯狂讲义》,或者搜下java实参传递给形参的例子
java里类变量里储存的是类实例的引用,可以类比c++的指针。
在第一段代码里,把类的引用作为参数传进来,通过引用操作外面的Circle实例,所以前两行代码是有效的。
第三行new了一个新的Circle实例并使局部变量circle指向它。函数运行结束后,局部变量circle被清理,你new出来的新实例也会因为没有引用计数被java内存回收机制清理。
在第二段代码里,第一行就把circle的指向由外部Circle实例改为new出来的新实例。
所以后两行都是对这个新实例进行操作,然后在函数运行结束之后被清理,外面的那个Circle实例没有任何改变。
理解这个问题的前提是要理解java的类引用机制。
【 在 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了。。
多谢
【 在 CharlseC 的大作中提到: 】
: java里类变量里储存的是类实例的引用,可以类比c++的指针。
: 在第一段代码里,把类的引用作为参数传进来,通过引用操作外面的Circle实例,所以前两行代码是有效的。
: 第三行new了一个新的Circle实例并使局部变量circle指向它。函数运行结束后,局部变量circle被清理,你new出来的新实例也会因为没有引用计数被java内存回收机制清理。
: ...................