У меня есть фиктивная функция 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 не имеет значения null и t равно null.
if (threatener != null) System.exit(42);
if (board[row][col] != null) {
turhake(board[row][col], threatener);
if (threatener == null) System.exit(41);
}
Результат должен быть, что и р и т (плата [строка] [столбец] и threatener) указывают на тот же объект. Однако моя программа выходит с кодом 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 после того, как ему был назначен ненулевой объект?
Java использует пропуск по значению, всегда. Изменение параметра ('t = p;' в вашем методе) не влияет. См. Http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value –
Вам следует попробовать просто вернуть 'p' из метода и назначить его таким образом. Его пропуск по значению отсутствует. – 3kings
угроза безопасности * никогда * не назначена. Java - это «вызов по значению». – JimmyB