As for java, && is the lazy version of &, || is the lazy version of |.
Beginning programmers understand neither, lazy boolean operators are difficult, and the non-lazy versions happily work on non-boolean variables, performing the bitwise operation.
Not to mention i'm now starting to wonder why we shouldn't use the XOR ^ in java instead of !=. Perhaps i'll start to do that when i want to mess around with people :D
I find it more stunning that i can use the bitwise XOR as unequal operator on booleans, then using != for XOR operations.