В настоящее время я исправляю ошибку в чужом коде Java, но не могу объяснить эту ошибку. Рассматриваемый код представляет собой следующий оператор if:
if (locked && DEBUG_ENABLED
&& owner != null
&& (owner.equals(playerName) || subowner.equals(playerName))
&& handleCommand(playerName, message)) {
....
} else {
....
}
В котором DEBUG_ENABLED
инициализируется как private static boolean DEBUG_ENABLED = false;
, а handleCommand
работает следующим образом:
public boolean handleCommand(String name, String msg) {
if(msg.equals("Command1")) {
....
} else if(msg.equals("Command2")) {
....
} ....
} else { // No matching command
return false;
}
return true;
}
Что меня озадачивает, так это то, что хотя DEBUG_ENABLED
установлено значение false, код все еще вызывает и выполняет функцию handleCommand
. Я всегда думал, что это не должно происходить из-за короткого замыкания. Сам if-оператор в сумме по-прежнему оценивается как ложный, так как выполняется только код внутри else-блока в первом фрагменте.
Итак, почему это выражение if ведет себя так? Это не короткое замыкание, или я неправильно понимаю принцип, или с этой частью кода что-то совсем другое не так? (Помимо отсутствующей проверки нуля для subowner
, которая выполняется за пределами этой части.)
DEBUG_ENABLED
может бытьtrue
? - person Sotirios Delimanolis   schedule 08.09.2013DEBUG_ENABLED == false
? - person BackSlash   schedule 08.09.2013||
означает, что еслиsubowner.equals
возвращаетtrue
,handleCommand
все равно необходимо проверить. Поскольку есть предложение ИЛИ, если одна сторона ложна, другую сторону все равно нужно проверить.DEBUG_ENABLED
делает левую часть||
ложной, но правая часть все еще может быть истинной. - person David Schwartz   schedule 08.09.2013handleCommand
найдено совпадение, она отображает некоторый текст или выполняет действие. Каждый раз при тестировании эти действия проверяются, а также действия в остальной части первого фрагмента. (Он не показывает какие-либо действия, выполняемые, если оператор if оценивается как true.) - person user2757672   schedule 08.09.2013()
вокруг||
изолировали его, и что общее состояние представляет собой серию&&
. Я ошибаюсь в этом предположении? - person user2757672   schedule 08.09.2013