Wu blanco:
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t || ((i++) == 0));
b = (f || ((i+=2) > 0));
System.out.println(i);
Después de ejecutar el código anterior, el resultado de la impresión es 2, no 3, ¿por qué?
Encuentro "i" de 0 No 1 después de "b = (t || ((i ++) == 0))" ejecutado por debuging.Well, estoy confundido por qué "i ++" no cambios "i".
Jon Skeet:
Bien, estoy confundido por qué "i ++" no cambios "i".
Debido a que i++
no se ejecuta en el código que nos ha facilitado.
En una expresión de la forma a || b
, primero a
se evalúa, y si es verdad (que es en este caso), la expresión b
no se evaluó. Esto se conoce como cortocircuitos .
Esto se describe en la sección de JLS 15,24 .
Si cambia el código para utilizar la no cortocircuitada |
operador en su lugar, como esto:
b = (t | ((i++) == 0));
... entonces se evaluará ambos operadores independientemente.