Java 这里到底发生了什么?这是一个用于交换两个变量的代码
另外,如果a=20,b=10,为什么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 = 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
sob=10
,但我们也返回了10),然后a=20-(0)
soa=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);