Tiene que ver con la Precedencia del operador, que es el orden con el que los operadores son evaluados por el intérprete de Java.
Ver here para los documentos. Una acrónimo útil es BUDMASRELCA - B raquetas, U nary, D IV- M ultiplication (en realidad multiplicativo ya que incluye módulo), A ddittion- S ubtraction, R elational, E calidad, L ogical, C en adelante (ternario), A ssignment. He perdido operadores de Bitwise, pero se pueden agrupar en Logical, y tienen prioridad sobre los operadores lógicos normales.
0% 2! = 0 se evalúa como 0% 2 (multiplicativo) primero y luego se ha resultado 0 se evalúa con! = 0. (igualdad)
Internamente, los compiladores construir un árbol binario de expresión para representar el ordene como se muestra a continuación para su caso, usando operadores como raíces y hojas como valores u operadores adicionales (en el caso recursivo). Por lo tanto, los subárboles que tienen operadores deben evaluarse antes de que el operador raíz pueda evaluarse con el valor de sus hojas.
!=
/\
% 0
/\
0 2
Estoy seguro de que no es un error de codificación, copié esto directamente de mi libro, también se lo menciona varias veces en mi conferencia. – Michael
Eso es ... no lo que '%' significa. –