我想在Java中做這個小遊戲,但我似乎偶然發現了一個變量引用問題。 Player從中延伸的My Entity類保留了Dimension類型的變量。 這個尺寸得到通過實體類的構造函數設置如下所示:Java Pass-by-reference無法正常工作?
protected Dimension dimension;
public Entity(Dimension dimension) {
this.dimension = dimension;
}
在我的播放器類,我這是怎麼通過他constructur通過維對象:
public Player(Dimension dimension) {
super(dimension);
}
我也有一個遊戲類,保留所有可能的維度,加上一個額外的變量,稱爲活動維度,它保持對活動遊戲維度的引用。
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類中的副本。你能證明這個代碼嗎? – markspace
您正在重新分配您通過的參考。想象一下,你住在#5,你給每個人你的地址(通過參考),當他們寫你的地址時,你會得到這個職位(調用方法)。然後你偷偷搬家而不告訴任何人。你的帖子在哪裏去? –
@Mike Java永遠不會被引用。它通過對象的值傳遞引用。 – Kyle