【问题标题】:What is really happening here? This is a code for swapping two variables这里到底发生了什么?这是交换两个变量的代码
【发布时间】: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 之后是20b10 因此System.out.println(b = a);20
  • a=10,b=20 a = 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=ca=(b=c) 相同,因为= 运算符具有从右到左的关联性。在 OP 案例中遵循的规则是“从左到右评估子表达式”,这与关联性或优先级没有任何关系。

标签: java swap


【解决方案1】:
a = b-(a-(b = a));  //swapping a and b

这是一种无需支持变量即可交换numeric 类型的方法。

他们通常在面试中问你这个问题。

特别难读,因为它写在一行中,但请逐步考虑:

int a = 5;
int b = 2;

a = b - a; // <- -3
b = b - a; // <- 2 - ( - 3) <- 5
a = a + b; // <- (- 3) + 5 = 2

如果没有临时变量,您仍然无法交换非numeric 类型。


System.out.println(b = a);

我猜你想检查b 是否等于a,在这种情况下你应该写System.out.println(b == a),它的计算结果是一个布尔结果。

使用b = a,您将a 的值分配给b,然后打印其结果。

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2015-10-20
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多