На основе этого и этого ответа Java использует короткое замыкание в отношении операторов &&
и ||
. Это также дает &&
более высокий приоритет над ||
. Тем не менее, следующий код оценивается как true
:
boolean condition1 = true;
boolean condition2 = true;
boolean condition3 = true;
if ( !condition3 && condition1 || condition2 ) {
System.out.println("Condition is true"); // prints Condition is true
}
Поскольку condition3
установлен на true
, это должно привести к тому, что !condition3
будет иметь значение false, так почему Java даже проверяет condition1
?
Если я добавлю скобки вокруг первого условия, оно все равно будет иметь значение true:
if ( (!condition3) && condition1 || condition2 ) {
System.out.println("Condition is true");
}
Я понимаю, почему этот код имеет значение true:
if ( condition1 || condition2 && !condition3) {
System.out.println("Condition is true");
}
Поскольку Java встречает ||
после condition1
, он даже не проверяет следующие условия. Но я не понимаю, почему первые два примера верны.
Моя цель - потребовать, чтобы condition3
было ложным, а затем иметь или conditon1
или condition2
(или оба) для истинности (но если condition3
равно true
, тогда я Я не хочу, чтобы оператор print выполнялся независимо от того, как condition1
и condition2
оценивают)
Спасибо