有人可以解释为什么这个代码输出是
not equals
not equals 2
在第一个if语句中,似乎a = 0 b / c是后缀增量;因此a不会增加下一行;但是,这两个不等于为什么?在第二个如果我运行调试器时a的值是2,但是测试是假的,为什么?
public static void main (String[] args)
{
int a = 0;
if (a++ == a++) {
System.out.println("equals");
} else {
System.out.println("not equals");
}
if (++a == 2) {
System.out.println("equals 2");
} else {
System.out.println("not equals 2");
}
}
答案 0 :(得分:1)
并不是它等到下一行。 ==
是一个'逻辑'运算符,因此首先计算每一侧的表达式,每个表达式都有增加'a'值的副作用。第一个增量的结果用于LHS,RHS的第二个结果。
在这些情况下,重要的不是运营商是'前缀'还是'后缀'
答案 1 :(得分:0)
编辑:刚刚意识到你还要求第一个不等于,这只是回答第二个问题。
因为
a
已经2
(已增加两次)++a
是3
所以3 == 2
为false
,因为在评估之前会应用前缀。答案 2 :(得分:0)
a ++(后增量)将增加第一个然后将其分配给变量。在你的第一个案例中
(a ++ == a ++)在第一个后期增量中,一个值将先增加1但尚未分配,但是当它到达第二个a ++时,现在分配一个值,然后再次递增它。
例如
if say a=0;
(a++==a++) would be (0==1)
所以现在评估if
后a值为2。
第二个案例
(++a==2) here a would be incremented to 3 , (3==2) which is false thus the else if executed