我在这里有一个虚拟的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