【发布时间】:2018-03-18 01:52:39
【问题描述】:
class Bar{
int barNum=28;
}
class Foo{
Bar myBar = new Bar();
void changeIt(Bar myBar){ //Here is object's reference is passed or the object is passed?
myBar.barNum = 99;
System.out.println("myBar.barNum in changeIt is " + myBar.barNum);
myBar = new Bar(); //Is the old myBar object destroyed now and new myBar is referring to something new now?
myBar.barNum = 420;
System.out.println("myBar.barNum in changeIt is now "+myBar.barNum);
}
public static void main(String args[]){
Foo f = new Foo();
System.out.println("f.myBar.barNum is "+f.myBar.barNum); //Explain f.myBar.barNum!
f.changeIt(f.myBar); //f.myBar refers to the object right? but we need to pass reference of the type Bar in changeIt!?
System.out.println("f.myBar.barNum after changeIt is "+ f.myBar.barNum); //How do you decide f will call which myBar.barNum?
}
}
请解释cmets中提到的问题 代码的输出是 f.myBar.barNum 为 28 myBar.bar 的变化数是 99 myBar.barNum 的变化现在是 420
f.myBar.barNum after changeIt is 99
【问题讨论】:
-
1) 参考。 2)它可能现在被摧毁,以后或永远不会。 3) 现场访问。 4) 不,它是 Bar 类型的引用。 5)嗯?您无需决定,这只是字段设置的任何值。
-
请再解释一下 5,myBar.barNum 的新值在创建 new bar() 后立即更改为 420;所以“f.myBar.barNum after changeIt is”的输出应该是 420 知道为什么是 99?