179
see 15.22.2 of the JLS. For boolean operands, the & operator is boolean, not bitwise. The only difference between && and & for boolean operands is that for && it is short circuited (meaning that the second operand isn't evaluated if the first operand evaluates to false).
So in your case, if b is a primitive, a = a && b, a = a & b, and a &= b all do the same thing.