【发布时间】:2018-08-04 15:51:58
【问题描述】:
a = b-(a-(b = a)); //swapping a and b
另外,如果a=20,b=10 为什么会这样做
System.out.println(b = a);
给出 20 作为结果?
【问题讨论】:
-
为什么要这样交换变量?迷惑人?
-
1) 数学。 2) 作业。
-
它给出
20,因为在a = b-(a-(b = a));a之后是20和b是10因此System.out.println(b = a);是20 -
当
a=10,b=20a = b-(a-(b = a));变成a = 20-(a-(b = a))然后a = 20-(10-(b = a))然后a = 20-(10-(10));(这里我们将a分配给b所以b=10但我们也返回了那个10),在那之后a=20-(0)所以a=20。交换完成。 -
@PrzemysławMoskal 实际上关联性并不是我想要的术语。当我们有一个操作数被两个具有相同优先级(优先级)的运算符包围时,关联性可以帮助我们,例如
a+b+c应该与哪个操作数b一起使用?因为left-to-right associativity of+`,我们知道它将被视为(a+b)+c。但是a=b=c与a=(b=c)相同,因为=运算符具有从右到左的关联性。在 OP 案例中遵循的规则是“从左到右评估子表达式”,这与关联性或优先级没有任何关系。