Я же теперь снова Java программист. И вот, не прошло и пары месяцев в этой роли, как я узнал новую мелочь. Оказывается, a = a && x
и a &= x
это не совсем одно и то же.
&= называется Compound Bitwise & assignment operator, и, как и другие бинарные операторы, он не «ленив», т. е. правая часть всегда вычисляется, вне зависимости от значения левой. Это отличает его от логического &&
, который проигнорирует правую часть, если левая false
.
Поэтому, если я напишу так
boolean a = false; a = a && compute();
то compute()
не будет вызвана. А если так
boolean a = false; a &= compute();
то будет.