// Este programa escribe: 3, 1, 1, 1 // Ayuda: Para entender lo que sucede, piensa en este otro ejemplo: // // f(a) + f(b) * f(c) // // Que el producto sea mas prioritario que la suma no implica que se calcule f(b)*f(c) // antes que f(a), lo que implica es que esa expresion NO es equivalente a esta: // // ( f(a) + f(b) ) * f(c) // // y SI que es equivalente a esta: // // f(a) + ( f(b) * f(c) ) // // Ahi tenemos un operador binario + cuyo operando izquierdo es f(a) y cuyo operando // derecho es ( f(b) * f(c) ). Y en Java tenemos la garantia de que el operando izquierdo // siempre se evalua antes que el derecho. Por tanto, se llama a f(a) antes que a f(b) y f(c). public class Prueba { public static void main(String[] args) { int a = 1, b = 0, c = 1, d = 1; if (a++ == ++b || c++ == ++d && a++ == c++) a++; System.out.println(a + ", " + b + ", " + c + ", " + d); } }