¿Por qué el valor de "i" no cambio después de ejecutar "boolean t = true, b; b = (t || ((i ++) == 0))"

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 ase 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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=313553&siteId=1
Recomendado
Clasificación