Как сказано в мышлении на Java, если у вас есть 2 логических объекта, x
и y
, вы можете использовать для них либо x= x&&y
, либо x=x&y
, так почему необходимо иметь оба типа?
Почему в Java есть 2 оператора логического типа?
comment
См. также: title="в каких случаях лучше использовать безусловное и вместо"> stackoverflow.com/questions/11411907/
- person assylias   schedule 26.11.2012
Ответы (4)
Два оператора действуют по-разному:
&
всегда будет оценивать оба операнда&&
короткое замыкание: если первый операнд оценивается какfalse
, то общий результат всегда будет ложным, а второй операнд не оценивается.
Дополнительные сведения см. в Спецификации языка Java:
person
Jon Skeet
schedule
26.11.2012
+1, кроме того, форма короткого замыкания - это почти всегда то, что вы захотите использовать. Это особенно полезно для избегания NPE, например:
if (someVar != null && someVar.getSomeProp() == 1) { ... }
- person ach; 26.11.2012
Посмотрите на вывод этого кода:
int x = 0;
boolean b = false & (++x == 1); // b is false
System.out.println(x); // prints 1
x = 0;
b = false && (++x == 1); // b is false
System.out.println(x); // prints 0
Это отличается, потому что &
всегда будет оценивать оба операнда, тогда как &&
не будет смотреть на второй операнд, если первый операнд false
, потому что все выражение всегда будет false
независимо от второго операнда.
person
jlordo
schedule
26.11.2012
&
будет оценивать оба операнда&&
пропустит оценку второго операнда, если первый операнд ложен
person
PermGenError
schedule
26.11.2012
@GanGnaMStYleOverFlowErroR Я соблазняюсь.
- person John Dvorak; 26.11.2012
& — побитовый оператор «и», && — логический оператор «и».
& всегда будет оценивать как левую, так и правую стороны, && будет оценивать только левую, если этого достаточно для оценки выражения (например, false && true : оценивается только левая сторона, потому что, если левая сторона ложна, все выражение должно быть ложным)
person
NickJ
schedule
26.11.2012