Short-circuit operators && and || skip their right operand when the left operand already determines the result. Their non-short-circuit counterparts, & and |, always evaluate both operands. section 2.7
A bounds-checking typo
In `index >= 0 && index < data.length & data[index] > 0`, the final `&` forces `data[index]` to execute even when the index is out of bounds, causing ArrayIndexOutOfBoundsException. Use `&&` when the later check depends on the earlier one. section 2.7


