Java 为什么';ti++;这里是增量吗?

Java 为什么';ti++;这里是增量吗?,java,Java,不久前我就开始学习java,最近我遇到了这个问题 int i = 0; boolean b = true; if(b || (i++ == 1)) System.out.println(i); //i is 0 System.out.println(i); // i is still 0 if(((i++) == 0) || ((i++) == 0)) System.out.println(i); // i is now 1 System.out.println(i); // i

不久前我就开始学习java,最近我遇到了这个问题

int i = 0;
boolean b = true;
if(b || (i++ == 1)) 
 System.out.println(i); //i is 0
System.out.println(i); // i is still 0

if(((i++) == 0) || ((i++) == 0))
 System.out.println(i); // i is now 1   
System.out.println(i); // i is 1

如果我仍然是零,但不在第二个之后,为什么在第一个之后呢?

i++
是一个后增量运算符。因此,
i++==1
将首先用1检查i,一旦检查完成,post将其值增加到
+1
,即此时i将为1


如果您首先需要值1,如果然后使用
++i==1
,它将首先将值增加1,然后说
1==1
,这将计算为真。

条件OR操作符是一个“短路”操作符。根据:

条件or运算符| |运算符类似于|(§15.22.2),但仅当其左侧操作数的值为false时才计算其右侧操作数

这意味着如果左操作数为
true
,则它不会计算右操作数。逻辑上,如果“or”运算符的一个操作数为
true
,则整个表达式为
true
,因此不需要对另一个操作数求值

为了

i++==1
未计算,
i
仍为
0

为了


这意味着由于
i++
产生
0
,然后将
i
增加到
1
,因此左侧表达式仍然是
true
,因此不计算
i++=0
i
保持
1

这是因为第一个增量永远不会执行

if(b || (i++ == 1))

如果
b
true
(即缩短执行),则无论表达式的第二部分将不执行,执行都会将表达式计算为
true

我认为您在使用此增量操作时有问题!这不是犯了错误吗

错误:意外类型 if((i++=0)| |(i++=0)) ^ 必需:变量 发现:价值


这里很简单,如果,首先我检查它是否等于你的值,然后它会增加,在你的情况下,首先,如果你把一个or条件放进去,它会在第一个条件满足后显示为零,它不会去检查下一个条件,所以值仍然是0!你可以检查这个,只要用if(i++==1)检查一下,你就会看到它的神奇之处

(A)在代码中包含大括号,以及(B)请了解i++==0和i++=0的区别查找++运算符的递增前后。另外,考虑双OR运算符及其短路行为。
|
是短路;所以在第一个if条件下;因为
b
真的
i++==1
没有被计算。您希望
|
做什么?
if((i++ == 0) || (i++ = 0))
if(b || (i++ == 1))