The part I keep getting stuck on is
boolean(0 % 2 !=0)
== false. I mean if 2 goes into 0, 0 times then the remainder would be 2, and 2 does not equal 0. S
It has to do with Operator Precedence, that is the order with which operators are evaluated by the Java interpretor.
See here for the docs. One useful acronym is BUDMASRELCA - Brackets, Unary, Div-Multiplication (actually multiplicative as it includes modulo), Addittion-Subtraction,Relational,Equality,Logical,Conditional(ternary),Assignment. I've missed out Bitwise operators, but they could be grouped under Logical, and they take precedence over normal logical operators.
0 % 2 !=0 is evaluated as 0%2 (multiplicative) first and then it's result 0 is evaluated with != 0. (equality)
Internally, compilers build a binary expression tree to represent the order as shown below for your case, using operators as roots and leaves as values or further operators (in the recursive case). So the sub-trees that have operators need to be evaluated before the root operator can be evaluated with the value of it's leaves.
!=
/ \
% 0
/\
0 2