Как работает оператор if в Java, если в нем есть присваивание и проверка равенства OR
-d вместе ??
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
Почему эта печать ЛОЖНА?
java
if-statement
logic
RoHaN
источник
источник
test1=false
,test1==false
естьfalse
,false || false
этоfalse or false
что естьfalse
.test1 = true
Ответы:
Выражение анализируется не так, как вы думаете. Это не
в этом случае результат был бы
true
, ноfalse || test1 == false
Сначала вычисляется значение выражения, и оно так и естьfalse
, потому чтоtest1
оно настроено наtrue
вход в вычисление.Причина он обрабатывается таким образом, что преимущество из
||
ниже , чем у==
оператора, но выше , чем приоритет оператора присваивания=
.источник
((test1 = false) || test1 == false)
общее значение будетtrue
.==
это вверху||
, но=
внизу||
.||
). Относительный приоритет||
и==
имеет значение только для того, чтобы показать, что синтаксический анализ не такойtest1 = ((false || test1) == false)
, как в , что я не думаю, что кто-либо мог бы разумно ожидать (кстати, относительный приоритет или, в более общем смысле||
,&&
имеет более низкий приоритет, чем отношения, также легко помню, так как использовал все время).||
и==
vs||
и=
объясняет, почему это ведет себя не так, как (общий) случайa == b || c == d
.По сути, это вопрос приоритета. Вы предполагаете, что ваш код эквивалентен:
... но это не так. Фактически это эквивалентно:
... что эквивалентно:
(потому что
test1
этоtrue
для начала)... что эквивалентно:
который присваивает значение
false
кtest1
, с результатом выражения существfalse
.См. Полезную таблицу приоритетов операторов в учебнике Java по операторам .
источник
Выражение
test1 = false || test1 == false
будет оценено на следующем шаге.ШАГ: 1-
test1 = false || test1 == false
// приоритет==
наивысшийШАГ: 2-
test1 = false || false
// Оператор||
имеет более высокий приоритетШАГ 3-
test1 = false
ШАГ: 4-
false
Поскольку логическое значение выражения становится ложным, выполняется инструкция else.
источник
(test1 = false || test1 == false)
возвращает false, потому что оба они ложны.(test1 = false || test1 == true)
это правда, потому что одна из них вернаисточник