我很久以前就开始学习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
如果我仍然为零而不是在第二个之后,第一个之后怎么样?
答案 0 :(得分:1)
||
条件OR运算符是“短路”运算符。根据{{3}}:
条件或运算符||运算符就像| (§15.22.2),但仅在其左侧操作数的值为假时才计算其右侧操作数。
这意味着如果左操作数是true
,那么它不会评估右操作数。逻辑上,如果“或”运算符的一个操作数是true
,则整个表达式为true
,因此不需要对另一个操作数进行求值。
有关
if(b || (i++ == 1))
i++ == 1
未评估,i
仍为0
。
有关
if((i++ == 0) || (i++ = 0))
这意味着,因为i++
会产生0
,然后将i
增加到1
,左侧表达式仍然是true
,所以{{1}没有评估。 i++ = 0
仍为i
。
答案 1 :(得分:1)
那是因为第一个增量永远不会被执行:
if(b || (i++ == 1))
如果b
为true
(即)缩短执行将表达式计算为true
,而不管表达式的第二部分将不会被执行。
答案 2 :(得分:0)
i++
是一个后增量运算符。因此i++ == 1
首先会检查我1,一旦完成,发布它会将其值增加到+1
,即此时我将为1。
如果您首先需要值1,那么使用++i == 1
首先将值增加1,然后将1 == 1
表示将评估为真。
答案 3 :(得分:0)
我认为您使用此增量操作时遇到问题!这不是一个错误
错误:意外类型 if((i ++ == 0)||(i ++ = 0)) ^ 必需:变量 发现:价值
并且简单就在这里,如果,首先我检查它是否等于你的值然后它会增加,在你的情况下,如果你正在运行,因为你放了一个或条件所以它会在第一个条件满足后显示为零它不会上去查看下一个条件,所以价值仍为0!你可以检查一下if(i ++ == 1)并且你会看到魔法!