Marilyn's answer is an oversimplification as Neil points out. & can be used for booleans as well. However, I still agree with her. In seven years of
Java programming, I've never had occasion to use the non-short-circuit version of the boolean operators. In fact using it implies that you rely on side effects of the boolean expression, which violates good coding style. So, while Neil is 100% correct, I still say:
&& is for booleans
& is for bits