两个具有相同名称的Java引用变量;这为何有效?

时间:2016-06-07 09:45:43

标签: java

编辑:我知道有许多问题需要通过参考/价值等等,而且我已经检查了大量的问题。我仍然没有“得到”它。如果有人可以像我三岁那样解释这段代码,我想最终会点击。

编辑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'参考被贴出来的?

0 个答案:

没有答案