我能使用另一个对象变量修改两个或更多对象实例吗?

时间:2015-03-17 14:01:51

标签: java

我正在编写一个简单的双人游戏控制台应用程序,我想知道我是否可以在下面执行以下操作。我对整个Java传值/参考文章感到困惑....

Player p1 = new Player("John");
Player p2 = new Player("Sam");
Player current = p1;

while(p1.life > 0 && p2.life > 0) {
    current.doSomething();
    if(current.name.equals(p1.name)) {
        current = p2;
    } else {
        current = p1;
    }
}

我担心的是变量current可能会被修改,但不是p1p2。这是我要修改的那两个实例。我只是不想为每个玩家复制一个完整的代码块,导致一个非常笨重的if-else语句。

3 个答案:

答案 0 :(得分:1)

您的担心是错误的。currentp1p2都是引用。在您的情况下有2个实例和3个引用。因此,current指向的实例可以进行修改,并会反映在p1p2中。

答案 1 :(得分:1)

没关系。在Java中,对象变量是引用。这意味着变量不包含值,但是是包含值的结构的间接。因此,当current=p1成立时,current.lifep1.life确实具有完全相同的效果。 Java中的对象变量就像是你的名字和昵称。你是对象,任何人都可以使用你的名字或任何合适的昵称来引用你。

答案 2 :(得分:1)

  

我是否可以使用另一个修改两个或更多个对象实例   对象变量

是的,你可以!!!

Java 传递值传递参考,但是在Objects的情况下,因为它们位于堆内存中的单个位置,所以这两个参考指向单个对象,而不是创建了副本的变量。

Website w=new Website("StackOverflow");
changeName(w);

public void changeName(Website w){<--- this w is now pointing to same Object passed to it , not making copies unlike variables

w.setName("StackExchange");
}

由于传递了Object,因此对Object状态所做的更改将反映在main(i.e caller)函数