It is not (that's
not) a Side Effect from the point of view of the Java language author and maintainers. It is defined behavior, as shown in the Java Language Specification. (My reference was from the Third Edition. If you are interested, you can download the edition appropriate for your version of Java here:
Java SE Specifications)
Here are the facts, as documented in the JLS:
Integer Bitwise operators &, ^, and | were designed for operands that can be converted to primitive integer data types.
Boolean Logical Operators &, ^, and | were designed for boolean (and Boolean) operands.
If you don't want to use the boolean logical operators, '&' '^' and '|' that's OK. I mean, nobody will try to make you use something that you don't like, but they
are part of the language. Deterministic behavior is defined and guaranteed. (Note that neither the JLS nor I said anything about a boolean '~' operator. There is no such thing defined for the Java language.)
Cheers!
Z