"a |= b" differs from "a = a || b;"

This runs without problem:

Integer a = null;
boolean error = true;
error = error || (a.intValue() > 0);

But this gives an NPE:

Integer a = null;
boolean error = true;
error |= (a.intValue() > 0);

 This is because |= is bitwise or and || is logical or. A boolean could technically be seen as a one-bit variable but internally in the jvm it is not a single bit. So the bitwise or can't skip the rest of the expression as long as not all bits are true.