【发布时间】:2015-08-26 09:21:01
【问题描述】:
我正在尝试用 Java 制作这个小游戏,但我似乎偶然发现了一个变量引用问题。 Player 扩展自我的 Entity 类,它保留一个 Dimension 类型的变量。 此 Dimension 通过 Entity 类的构造函数设置,如下所示:
protected Dimension dimension;
public Entity(Dimension dimension) {
this.dimension = dimension;
}
在我的播放器类中,这就是我通过他的构造函数传递维度对象的方式:
public Player(Dimension dimension) {
super(dimension);
}
我还有一个 Game 类,它保留所有可能的维度,以及一个名为 activedimension 的额外变量,它保留对活动游戏维度的引用。
private Dimension activedimension;
private Dimension overworld;
private Dimension otherdimension;
public Game() {
overworld = new OverWorldDimension();
otherdimension = new OtherDimension();
activedimension = overworld;
}
当我想重置我的主世界维度时,我使用这个方法:
public void resetOverWorld() {
overworld = new OverWorldDimension();
activedimension = overworld;
}
现在,每当我从任何地方调用此 resetOverWorld 方法时,似乎我的 activedimension 确实刷新了,但存储在我的 Player/Enitity 类中的维度却没有。 我对 Java 还很陌生,所以我不知道我是否对通过构造函数和方法传递的变量引用做错了。 我的应用程序似乎在某处复制维度对象而不是传递引用,但我不知道在哪里。
欢迎任何帮助或想法。 提前致谢 〜Krikke
【问题讨论】:
-
Java 是按值传递的。编辑:而且我看不到您在 Entity/Player 类中更新副本的位置。可以出示一下代码吗?
-
您正在重新分配您传递的引用。想象一下你住在#5,你给每个人你的地址(传递参考),当他们写信给你的地址时,你会得到帖子(调用方法)。然后你偷偷搬家,不告诉任何人。你的帖子去哪儿了?
-
@Mike Java 永远不会通过引用传递。它通过对象的值传递引用。
-
@Kyle 你说的很对,我的语义错了!
标签: java variables reference pass-by-reference