Java中判断条件为真的for循环仅输出0,是什么原因?
原因分析
你给出的代码如下:
boolean a = false; for (int i = 0; a = !a ;) { System.out.println(i++); }
输出只有0是因为for循环的执行规则和赋值表达式的特性共同作用导致的,完整执行逻辑如下:
- 首先执行for循环的初始化语句:声明整型变量
i,初始值为0。 - 第一次判断循环条件:条件位置的
a = !a是赋值表达式,不是相等判断(相等判断应该用==),执行时会先计算!a的值,再把结果赋值给a,整个表达式的返回值就是赋值后a的值。初始a为false,所以!a是true,赋值后a变为true,表达式返回true,满足循环进入条件,执行循环体。 - 循环体内执行
System.out.println(i++):i++是后自增运算符,会先返回i的当前值0完成打印,再把i的值更新为1。 - 循环体执行结束后,因为for循环第三个位置的迭代更新语句为空,没有任何操作,直接进入下一轮条件判断。
- 第二次判断循环条件
a = !a:此时a是true,!a为false,赋值后a变为false,表达式返回false,循环直接终止,不会再执行循环体。
你误以为循环条件恒真,大概率是把这里的=当成了==,如果是a == !a这个条件本身就恒为假,循环一次都不会跑,和当前代码逻辑完全不同。
内容的提问来源于stack exchange,提问作者alvira
相关产品推荐
相关产品推荐

