From the JLS:
15.26.2. Compound Assignment Operators
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.
15.22.2. Boolean Logical Operators &, ^, and |
When both operands of a &, ^, or | operator are of type boolean or Boolean, then the type of the bitwise operator expression is boolean. In all cases, the operands are subject to unboxing conversion (§5.1.8) as necessary.
For |, the result value is false if both operand values are false; otherwise, the result is true.
This means that
val |= somethingElse();
is strictly equivalent to
val = val | somethingElse();
(assuming somethingElse() returns boolean or Boolean).
I'd be curious if right operand is evaluated if left value already is true.
Yes, it would be evaluated, since | does not short-circuit:
15.7.2. Evaluate Operands before Operation
The Java programming language guarantees that every operand of an operator (except the conditional operators &&, ||, and ? :) appears to be fully evaluated before any part of the operation itself is performed.
15.24. Conditional-Or Operator ||
Thus, || computes the same result as | on boolean or Boolean operands. It differs only in that the right-hand operand expression is evaluated conditionally rather than always.