2个回答
展开全部
^ 在java中是位运算符,异或运算。你圈的那三行核心代码就是通过异或运算来交换变量A、B的值。
关于异或运算:异或运算
public class Test {
public static void main(String[] args) {
int A = 14;
int B = 5;
A = A ^ B;
B = B ^ A;
A = A ^ B;
System.out.println("A = " + A); // A = 5
System.out.println("B = " + B); // B = 14
}
}
执行结果
就现在的实际开发来说这种写法适合装逼。
在现在的实际开发中通常是下面这样写的,简单易懂
int temp = A; // 引入一个中间变量
A = B;
B = temp;
展开全部
因为异或是位运算,利用异或方式交换变量其实就是交换两个变量对应的位。所以只要研究会1bit大小的变量交换的原理就好了。而研究1bit大小变量交换原理的方法就是穷举了。
+------+--+--+--+--+
|ab的值|00|01|10|11|
+------+--+--+--+--+
|a=a^b |00|11|10|01|
+------+--+--+--+--+
|b=a^b |00|10|11|01|
+------+--+--+--+--+
|a=a^b |00|10|01|11|
+------+--+--+--+--+
+--+--+--+--+
从 |00|01|10|11|
+--+--+--+--+
到 |00|10|01|11|
+--+--+--+--+
实现了位的交换 。
两个变量对应的位交换了,两个变量也就交换了。
至于两个变量为同一引用时会出现什么结果,照着上面的方法自己试一试就知道了。
作者:mewiteor
链接:https://www.zhihu.com/question/62003033/answer/193562832
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
+------+--+--+--+--+
|ab的值|00|01|10|11|
+------+--+--+--+--+
|a=a^b |00|11|10|01|
+------+--+--+--+--+
|b=a^b |00|10|11|01|
+------+--+--+--+--+
|a=a^b |00|10|01|11|
+------+--+--+--+--+
+--+--+--+--+
从 |00|01|10|11|
+--+--+--+--+
到 |00|10|01|11|
+--+--+--+--+
实现了位的交换 。
两个变量对应的位交换了,两个变量也就交换了。
至于两个变量为同一引用时会出现什么结果,照着上面的方法自己试一试就知道了。
作者:mewiteor
链接:https://www.zhihu.com/question/62003033/answer/193562832
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询