我在這裏有一個虛擬的Java函數。如果p是一個有效的對象,t應該指向它。爲什麼Java代碼在移入函數時不起作用?
private void turhake(Piece p, Piece t) {
if (null == t && null != p) {
t = p;
if (null == t) System.exit(44);
} else System.exit(43);
}
在下面的代碼中,我確保僅當p非空且t爲空時纔會調用上述函數。
if (threatener != null) System.exit(42);
if (board[row][col] != null) {
turhake(board[row][col], threatener);
if (threatener == null) System.exit(41);
}
結果應該是p和t(board [row] [col]和threatner)指向同一個對象。但是,我的程序退出了代碼41,表示在函數調用後t被取消。 Piece類有幾個枚舉變量,沒有什麼特別的。如果我用下面的函數調用,所有都是好的。
if (threatener != null) System.exit(42);
if (board[row][col] != null) {
threatener = board[row][col];
if (threatener == null) System.exit(41);
}
是什麼使t指向null後,它已被成功地分配一個非null對象?
Java總是使用按值傳遞。修改參數(在你的方法中't = p;')不起作用。請參閱http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value –
您應該嘗試從方法中返回'p'並以此方式進行分配。它通過價值沒有參考。 – 3kings
威脅者是*永遠不會分配任何東西。 Java是「按價值調用」。 – JimmyB