Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这里到底发生了什么?这是一个用于交换两个变量的代码_Java_Swap - Fatal编程技术网

Java 这里到底发生了什么?这是一个用于交换两个变量的代码

Java 这里到底发生了什么?这是一个用于交换两个变量的代码,java,swap,Java,Swap,另外,如果a=20,b=10,为什么 a = b-(a-(b = a)); //swapping a and b 结果是20 System.out.println(b = a); 这是一种交换数字类型的方法,无需支持变量 他们通常在面试中问你这个问题 它是特别难读的,因为它是用一行写的,但是要一步一步地考虑: a = b-(a-(b = a)); //swapping a and b 我想您应该检查b是否等于a,在这种情况下,您应该编写System.out.println(b==a),

另外,如果a=20,b=10,为什么

a = b-(a-(b = a));  //swapping a and b
结果是20

System.out.println(b = a);
这是一种交换
数字
类型的方法,无需支持变量

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

它是特别难读的,因为它是用一行写的,但是要一步一步地考虑:

a = b-(a-(b = a));  //swapping a and b
我想您应该检查
b
是否等于
a
,在这种情况下,您应该编写
System.out.println(b==a)
,它的计算结果是布尔结果


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

为什么要这样交换变量?让人困惑?1)数学。2) 赋值。它给出
20
,因为
a=b-(a-(b=a))
a
20
b
10
因此
系统输出打印项次(b=a)a=10,b=20
a=b-(a-(b=a))时,code>为
20
变成
a=20-(a-(b=a))
然后
a=20-(10-(b=a))
然后
a=20-(10-(10))
(这里我们将
a
分配给
b
so
b=10
,但我们也返回了10),然后
a=20-(0)
so
a=20
。交换完成。@PrzemysławMoskal实际上结合性不是我想要的术语。当一个操作数被两个具有相同优先级(优先级)的运算符包围时,关联性有助于我们,例如对于
a+b+c
应该与哪个操作数
b
一起使用?由于
+`的
从左到右的关联性,我们知道它将被视为
(a+b)+c
。但是
a=b=c
a=(b=c)
相同,因为
=
操作符从右向左关联。OP案例中遵循的规则是“子表达式从左到右求值”,这实际上与关联性或优先级无关。
int a = 5;
int b = 2;

a = b - a; // <- -3
b = b - a; // <- 2 - ( - 3) <- 5
a = a + b; // <- (- 3) + 5 = 2
System.out.println(b = a);