我最近写了这样的代码段
public class TestIncrement {
public static void main(String[] args){
double a = 12.4;
double b = 5.6;
a -=b -=b -= b -= b -= b -= b;
System.out.println(a);
a-=b;
System.out.println(a);
}
}
,输出为:
12.4
12.4
为什么增量运算符不起作用?
答案 0 :(得分:9)
-=
和所有其他赋值运算符都是右关联的。这一行:
a -=b -=b -= b -= b -= b -= b;
并不意味着“将a
减少b
6次”。它的含义与此相同:
a -= (b -= (b -= (b -= (b -= (b -= b)))));
表示“按b
的值减少b
,然后按b
的新值减少b
,然后再执行3次,然后减少a
{1}}的最终值为b
“。 b
在第一个-=
之后为0,因此语句的其余部分不执行任何操作,
a-=b;
线。
答案 1 :(得分:2)
确实有效。您的b
变量等于0.
答案 2 :(得分:1)
如果我将括号括起来以便于理解,我们就明白了:
public class TestIncrement {
public static void main(String[] args){
double a = 12.4;
double b = 5.6;
a -= (b -= (b -= (b -= (b -= (b -= b)))));
System.out.println(a);
a -= b;
System.out.println(a);
}
}
第一个b -= b
语句将b
设置为0
。从0
中再次减去b
4次后,结果仍为0
,这显然会使a
的值保持不变。即使您再次尝试,在a -= b
行中,您仍会获得相同的结果:12.4 − 0.0 = 12.4
。
答案 3 :(得分:0)
你可以通过编写一个更简单的例子来自己解决这个问题。
public static void main(String[] args){
int a = 1;
int b = 2;
int c = 3;
a -= b -= c;
System.out.println(a + " " + b + " " + c);
}
您会惊讶地看到输出为2 -1 3
这个原因是,上面的代码等于:
public static void main(String[] args){
int a = 1;
int b = 2;
int c = 3;
b -= c;
a -= b;
System.out.println(a + " " + b + " " + c);
}
不要做意大利面条代码。 :(