1
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
4

4 回答 4

2

因为assignment 是一个运算符,它返回它设置的新值,虽然它通常是最后一个优先级,但括号将它移到非括号运算符之前。可以这样想:

  1. a设置为 3。
  2. a设置为 2,返回 2。然后乘以 的a,即 2,设置b为 4。
  3. 4(旧b)乘以 的结果b=5,即 5。b现在是 5,并c设置为4x5值(20)。
于 2013-11-11T15:42:54.067 回答
1

因此 b 为 5 (b=5);

因此 a 为 2 (a=2)

c 是 20 因为这个 4 * (b=5);

于 2013-11-11T15:47:38.123 回答
1

您已b在第二个语句中重新分配给 5。结果b将是 5,直到再次分配。这其中的哪一部分让您感到困惑?

于 2013-11-11T15:44:05.437 回答
1

您在第三行将 5 分配给 b。所以,这就是它包含的内容。

于 2013-11-11T15:44:37.673 回答