int a = 3;
int b = (a=2)*a;
int c = b * (b=5);
System.out.println("a=" + a + " b=" + b + " c=" + c);
有人可以解释为什么输出是:
a=2 b=5 c=20
而不是
a=2 b=4 c=20
答案 0 :(得分:2)
因为assignment is an operator returns the new value it set,并且虽然它通常优先于最后,但括号在非括号运算符之前将其向上移动。可以这样想:
a
设为3。a
设置为2,返回2.然后乘以a
的 new 值,即2,将b
设置为4 b
)乘以b=5
的结果,即5 b
现在为5,c
设为{{1} }} value(20)。答案 1 :(得分:1)
您已在第二个语句中将b
重新分配给5。因此,b
将为5,直到再次分配为止。这有什么困扰你?
答案 2 :(得分:1)
您在第三行中为b分配5。所以,这就是它所包含的内容。
答案 3 :(得分:1)
b因为这个是5(b = 5);
a因为这个(a = 2)
是2 由于这个4 *(b = 5),c是20;