我有点不好意思地问这个问题,因为我应该更了解,但这就是我所拥有的。
我有一个对象“ Pitcher”,其int属性为“ runsAllowed”。我有一个对象Batter,其属性为“ responsiblePitcher”。我有一个对象团队,其属性为“投手”。当击球手到达底数时:
Batter.responsiblePitcher = Team.pitcher;
一切都很好。但是,如果在跑垒员打球的时候我们改变了投球,我在Team.pitcher中设置一个新的投手:
Team.pitcher = new Pitcher();
...,当然这会更改Batter.pitcher的值。
我应该如何做些不同的事情,以使Batter.responsiblePitcher属性继续指向允许他作为基础的投手,而不是指向Team.pitcher属性中的投手?再次,我觉得我应该已经知道这一点...
谢谢。
最佳答案
...,当然这会更改Batter.pitcher的值。
这不是真的。您的问题出在其他地方。也许您实际上是在像这样更改值:
Team.pitcher.changeSomeProperty(newValue);
然后,这确实会反映在其他引用中,因为它指向同一实例。
Java是通过值引用的语言。以下示例证明了这一点:
import java.util.Arrays;
public class Test {
public static void main(String... args) {
String[] strings = new String[] { "foo", "bar" };
changeReference(strings);
System.out.println(Arrays.toString(strings)); // still [foo, bar]
changeValue(strings);
System.out.println(Arrays.toString(strings)); // [foo, foo]
}
public static void changeReference(String[] strings) {
strings = new String[] { "foo", "foo" };
}
public static void changeValue(String[] strings) {
strings[1] = "foo";
}
}