Попытка понять блок кода, объединяющий логические и логические операторы в Java - PullRequest
0 голосов
/ 03 апреля 2019

Изучение Java, и это типовой вопрос, с которым я столкнулся. Я думаю, что понимаю логику ответа, но может ли кто-нибудь подтвердить, правильно ли я понимаю?

public class Q8 {

    static boolean b1;
    static boolean b2;
    static boolean b3;

    public static void main(String[] args) {
        boolean trueOrFalse = (b1 = true) || (b2 = true) && (b3 = true); //Line 9
        System.out.println(b1 + ", " + b2 + ", " + b3);
    }
}   

Программа печатает true, false, false на консоль.

Я понимаю, что переменным класса назначены значения по умолчанию false.

Прав ли я, говоря, что, поскольку b1 = true назначает значение true для b1 вместо проверки на равенство, как задан вопрос, чтобы вы поверили, сочетания клавиш или операторов оставляют b2 и b3 в качестве значений по умолчанию, и поэтому true, false, false выводит на консоль?

Ответы [ 3 ]

2 голосов
/ 03 апреля 2019

Да, это правильно. Вы будете устанавливать b1, оценивать и сокращать - так что остальное не будет установлено / оценено.

0 голосов
/ 03 апреля 2019

(b1 = true) присваивает b1 значение true, а остальное пропускается из-за оператора ИЛИ ||, поэтому b2 и b3 остаются с их ложными значениями по умолчанию

0 голосов
/ 03 апреля 2019

По сути, ваш код немного отличается от того, как вы, человек, читаете его.Компиляторы делают несколько строк из вашей одной строки.

// This is not exactly how it will be translated obviously, but this should make it a little bit more understandable for you.
if (trueOrFalse = (b1 = true))
else if (trueOrFalse = (b2 = true) && (b3 = true)); 

Это означает, что b2 и b3 всегда будут просто пропущены

|| это оператор ИЛИ и проверяет только вторуюоператор, когда первый оператор равен false Если когда-либо одна из сторон оператора OR истинна, код будет выполняться.

...