Почему этот оператор if, с заданием и проверкой равенства, оценивает значение false?
Как работает оператор Java if, когда он имеет назначение и проверку равенства OR
-d вместе?
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
Почему эта печать ЛОЖЬ?
Ответы
Ответ 1
Выражение не анализируется так, как вы думаете. Это не
(test1=false) || (test1 == false)
и в этом случае результат был бы true
, но
test1 = (false || test1 == false)
Сначала вычисляется значение выражения false || test1 == false
, и оно false
, потому что test1
устанавливается в true
, входя в вычисление.
Причина, по которой этот анализ анализируется, заключается в том, что precedence ||
ниже, чем оператор ==
, но выше, чем приоритет оператора присваивания =
.
Ответ 2
Это проблема приоритета, в основном. Вы предполагаете, что ваш код эквивалентен:
if ((test1 = false) || (test1 == false))
... но это не так. Это фактически эквивалентно:
if (test1 = (false || test1 == false))
... что эквивалентно:
if (test1 = (false || false))
(потому что test1
есть true
для начала)
... что эквивалентно:
if (test1 = false)
который присваивает значение false
test1
, в результате выражения false
.
См. учебник по Java для операторов для полезной таблицы приоритетов операторов.
Ответ 3
![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. Выполняется другое выражение.
Ответ 4
(test1 = false || test1 == false)
возвращает false, потому что оба они являются ложными. (test1 = false || test1 == true)
Это верно, потому что одно из них истинно