У меня есть следующие два фрагмента кода, которые производят различные выходы:Почему эта логическая переменная присваивается true?
boolean a = false, b = false, c = false, d = false;
if (a = false | (b = false) || (c = true) | (d = true)){
}
System.out.println("if (a = false | (b = false) || (c = true) | (d = true))");
System.out.printf("a=%b\nb=%b\nc=%b\nd=%b\n\n", a, b, c, d);
if ((a = false) | (b = false) || (c = true) | (d = true)){
}
System.out.println("if ((a = false) | (b = false) || (c = true) | (d = true))");
System.out.printf("a=%b\nb=%b\nc=%b\nd=%b\n", a, b, c, d);
При выполнении приведенного выше кода я получаю следующий результат:
if (a = false | (b = false) || (c = true) | (d = true))
a=true
b=false
c=true
d=true
if ((a = false) | (b = false) || (c = true) | (d = true))
a=false
b=false
c=true
d=true
Обратите внимание, что a
присваивается true
в первом фрагменте , но не во втором.
Почему упаковка скобок a
в круглых скобках делает такую разницу?
Пожалуйста, обратите внимание, что я использую операторы присваивания (=
) и операторы сравнения (не ==
) намеренно.
@Eran Я не хочу сравнивать, я устанавливаю его в false. но почему это становится правдой? –
@JohnE .: Тогда почему вы используете инструкцию if? – Stultuske
@Stultuske Нет ничего плохого в присваивании в выражении if. –