为什么不评估&&运算符的右侧?

Leo*_*Leo 2 java

小疑问.为什么输出以下代码1?为什么不3呢?

int i = 0;
boolean t = true, f = false, b;
b = (t && ((i++) == 0));
b = (f && ((i+=2) > 0));
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 7

条件 - 和运算符 - &&- 是短路的.如果左操作数为false,则不评估右操作数.这就是为什么((i+=2) > 0)永远不会被评估,并i保持1.

来自JLS 15.23:

&&运算符类似于&(§15.22.2),但仅当其左侧操作数的值为true时才计算其右侧操作数.