考虑这个代码:
long val = 0; for(int i = 0; i < 2; val++) val =+ ++i; System.out.println(val);
为什么val = 3到底是什么
我会这样计算:
val i 0 0 i < 2 = true; 0 0 ++i; 0 1 val =+ 1; 1 1 (end of for loop) val++; 2 1 i < 2 = true; 2 1 ++i; 2 2 val =+ 2; 4 2 (end of for loop) val++; 5 2 i < 2 = false; Output: 5
解决方法
我们首先关注不寻常的行:
val =+ ++i;
这里的运算符是=(赋值),(一元加)和(预增量).没有=运算符. Java将其解释为两个运算符:=和.加上适当的空格更清楚:
val = + ++i;
现在分析一下处理:
第一次迭代:val和i是0.我被递增到1,这是i的结果.一元不做任何事情,1被分配给val.然后迭代语句val发生,现在val为2.我仍然为1,因此满足for循环条件并发生第二次迭代.
第二次迭代:我再次递增到2.一元不做任何事情,val被分配2.迭代语句val再次出现,现在是3.但是现在是2,不小于2,所以循环终止,并打印val-3-.