Почему это утверждение if, с присвоением и проверкой равенства, оценивается как false?



Как работает Java если заявление работа, когда он имеет назначение и проверку равенства OR - d вместе??



public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}


почему эта печать ложная?

565   4  

4 ответов:

выражение не разбирается, как вы думаете. Это не

(test1=false) || (test1 == false)

в этом случае результат был бы true, а

test1 = (false || test1 == false)

значение false || test1 == false выражение вычисляется первым, и это false, потому что test1 установлено значение true переходим к вычислениям.

причина, по которой он разбирается таким образом, заключается в том, что приоритет на || меньше, чем == оператора, но выше, чем приоритет оператора присваивания =.

это вопрос приоритета, в основном. Вы предполагаете, что ваш код эквивалентен:

if ((test1 = false) || (test1 == false))

... но это не так. Это на самом деле эквивалентно:

if (test1 = (false || test1 == false))

... что эквивалентно:

if (test1 = (false || false))

(поскольку test1 и true начать с)

... что эквивалентно:

if (test1 = false)

, который присваивает значение false до test1, С результатом выражения false.

посмотреть Java учебник по операторам для полезной таблицы приоритета оператора.

please have a look over precedence of operators

выражение test1 = false || test1 == false будет оценивать в следующем шаге.

Шаг:1-test1 = false || test1 == false //приоритет == высокий

Шаг:2-test1 = false || false// оператора || имеют более высокий приоритет

Шаг:3-test1 = false

Шаг:4-false

так как логическое значение выражения становится false.So выполняется оператор else.

(test1 = false || test1 == false) возвращает false, потому что оба они являются ложными.(test1 = false || test1 == true) Это верно, потому что один из них истинен

Comments

    Ничего не найдено.