编辑:我知道有许多问题需要通过参考/价值等等,而且我已经检查了大量的问题。我仍然没有“得到”它。如果有人可以像我三岁那样解释这段代码,我想最终会点击。
编辑2:我是个白痴。有一个主要方法,我只是以某种方式阅读它。调整了示例代码。原帖:
我永远不会在现实生活中玩“参考捉迷藏”,但我对以下考试问题感到困惑。我知道答案,但我无法弄清楚为什么它是答案,如果这是有道理的。如果有人可以帮助我进行“点击”,我将非常感激。
以下是代码:
class Person {
public String name;
public int height;
}
class EJavaGuruPassObjects1 {
public static void main(String args[]) {
Person p = new Person();
p.name = "EJava";
anotherMethod(p);
System.out.println(p.name);
someMethod(p);
System.out.println(p.name);
}
static void anotherMethod(Person p) {
p = new Person();
p.name = "anotherMethod";
System.out.println(p.name);
}
static void someMethod(Person p) {
p.name = "someMethod";
System.out.println(p.name);
}
}
根据我正在使用的书,代码应输出:
anotherMethod EJava someMethod someMethod
对于我的生活,我不能弄明白为什么会这样做?
答案的第三和第四行,someMethod将'p'的名称设置为“someMethod”,然后打印p.name。好的,没问题。但是另一个方法做了一些奇怪的事情:它似乎将一个新的Person对象分配给'p',或者创建一个也称为'p'的新引用变量,并将新的Person对象分配给该对象。我怀疑它是后者。
现在它变得有趣了:该方法已经发挥了作用,剩下的代码现在想要打印p.name。如果现有变量被重新分配(我不这么认为,但是......也许?),它应该再次打印“anotherMethod”。如果确实创建了第二个'p'变量,我们就会遇到问题。为什么打印EJava?它是如何知道哪个'p'参考被贴出来的?