Java: оператор ИЛИ после оператора И в операторе «Если» - PullRequest
0 голосов
/ 05 сентября 2018

На основе этого и этого ответа Java использует короткое замыкание в отношении операторов && и ||. Это также дает && более высокий приоритет над ||. Тем не менее, следующий код оценивается как true:

    boolean condition1 = true;
    boolean condition2 = true;
    boolean condition3 = true;

    if ( !condition3 && condition1 || condition2 ) {
        System.out.println("Condition is true"); // prints Condition is true
    }

Поскольку condition3 установлен на true, это должно привести к тому, что !condition3 будет иметь значение false, так почему Java даже проверяет condition1?

Если я добавлю скобки вокруг первого условия, оно все равно будет иметь значение true:

    if ( (!condition3) && condition1 || condition2 ) {
        System.out.println("Condition is true");
    }

Я понимаю, почему этот код имеет значение true:

    if ( condition1 || condition2 && !condition3) {
        System.out.println("Condition is true");
    }

Поскольку Java встречает || после condition1, он даже не проверяет следующие условия. Но я не понимаю, почему первые два примера верны.

Моя цель - потребовать, чтобы condition3 было ложным, а затем иметь или conditon1 или condition2 (или оба) для истинности (но если condition3 равно true, тогда я Я не хочу, чтобы оператор print выполнялся независимо от того, как condition1 и condition2 оценивают)

Спасибо

1 Ответ

0 голосов
/ 05 сентября 2018

Вы сказали:

Это также дает && более высокий приоритет над ||.

, что означает, что !condition3 && condition1 будет оцениваться первым.

Так вот

!condition3 && condition1 || condition2

равно:

(!condition3 && condition1) || condition2

, поскольку condition2 равно true, выражение равно true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...