&&
является оператором короткого замыкания, что означает, что ++y > 2
не будет оцениваться до тех пор, пока ++x
не станет меньше 3
. В этом случае мы можем тривиально добавить сообщения отладки, чтобы получить значения для x
, y
и z
до и после блока if
, чтобы увидеть точно , что происходит (и когда). Как,
int x = 0, y = 0;
for (int z = 0; z < 5; z++) {
System.out.printf("Before: x = %d, y = %d, z = %d%n", x, y, z);
if (++x > 2 && ++y > 2) {
System.out.printf("Inside: x = %d, y = %d, z = %d%n", x, y, z);
x++;
}
System.out.printf("After: x = %d, y = %d, z = %d%n", x, y, z);
}
System.out.println(x + " " + y);
Что, надеюсь, прояснит любую оставшуюся путаницу
Before: x = 0, y = 0, z = 0
After: x = 1, y = 0, z = 0
Before: x = 1, y = 0, z = 1
After: x = 2, y = 0, z = 1
Before: x = 2, y = 0, z = 2
After: x = 3, y = 1, z = 2
Before: x = 3, y = 1, z = 3
After: x = 4, y = 2, z = 3
Before: x = 4, y = 2, z = 4
Inside: x = 5, y = 3, z = 4
After: x = 6, y = 3, z = 4
6 3