int num = x++ * 3;
=> ОК: х = 3, число = 6
num *= x;
=> каково начальное значение num? если num = 2, то вы тоже в порядке.
(x < 2) && (x > 1)
ложно, когда х = 2, ОК
(++x < 2) || (x < 1)
ложно, когда x = 2, также хорошо
Я помню, что я смотрел на openJDK, особенно класс Lower
в исходном коде javac, и ++ x переведен в x + = 1, поэтому вы можете видеть его как:
((x += 1)) < 2)
который (без типа кастинга): ((x = (x + 1)) < 2)
. Второй тест будет иметь более новое значение x, т. Е. 3, потому что java оценивает условия слева направо.