都能想到的操作
public void swap(int a,int b){
int temp = a;
a = b;
b = temp;
}
神操作
利用异或的运算法则 归零律:a ^ a = 0 恒等律:b ^ 0 = b 交换律:a ^ b = b ^ a
public void swap(int a,int b){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
public static void swap(int a,int b){
System.out.println("a::" + a + " " + "b::" + b);
a = a ^ b;
System.out.println("a::" + a + " " + "b::" + b);
b = a ^ b;
System.out.println("a::" + a + " " + "b::" + b);
a = a ^ b;
System.out.println("a::" + a + " " + "b::" + b);
}
public static void main(String[] args) {
swap(12,15);
}
二进制过程模拟 详细分析一下 将a赋给b,那么就需要 b = a ^ b ^ b,那么先a ^ b,再用结果去^b,就可以得到a。现在a等于a ^ b的值,b等于a的值,即a = 3,b=12,现在再用a ^ b就相当于用最开始的a ^ b ^ a即 12 ^ 15 ^ 12,所以就可以将b赋值给a。