Почему этот оператор 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) Это верно, потому что одно из них истинно