Почему это утверждение 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");
}
}
почему эта печать ложная?
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 учебник по операторам для полезной таблицы приоритета оператора.
выражение
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