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
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
因为assignment 是一个运算符,它返回它设置的新值,虽然它通常是最后一个优先级,但括号将它移到非括号运算符之前。可以这样想:
a
设置为 3。a
设置为 2,返回 2。然后乘以 的新值a
,即 2,设置b
为 4。b
)乘以 的结果b=5
,即 5。b
现在是 5,并c
设置为4x5
值(20)。因此 b 为 5 (b=5);
因此 a 为 2 (a=2)
c 是 20 因为这个 4 * (b=5);
您已b
在第二个语句中重新分配给 5。结果b
将是 5,直到再次分配。这其中的哪一部分让您感到困惑?
您在第三行将 5 分配给 b。所以,这就是它包含的内容。