方法一:
网上最常见的方法一,通过 ^ 符交换两个值。
x ^= y;
y ^= x;
x ^= y;
但是,当x与x 交换的时候。这种方法就炸了
x ^= x = 0...
呃,为什么要考虑 x ^= x;?
看下下面的代码吧:
<span> </span>int []arr = { 1,2,3,4,5 };
for (int i = 0; i < (arr.length/2) + 1; i++ ) {
arr [i] ^= arr[arr.length-1-i];
arr [arr.length-1-i] ^= arr[i];
arr [i] ^= arr[arr.length-1-i];
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
<span> </span>// 输出 5 4 0 2 1
方法二:
网上最常见的方法二,通过 + ,- 法交换
x = x + y;
y = x - y;
x = x - y;
这种方法,跟方法一一样,当x 与 x 交换的时候也炸了。
x = x + x; x = x - x = 0;
方法三:
x = x * y;
y = x / y;
x = x / y;
原理同上,爆炸方式也一样。
感觉前三种的原理都是一样的,
x = x 与 y 做某种运算,
y = (运算结果 x) 运算方式 (x) ,
x = (运算结果 x) 运算方式 (y) ,
然后是今天新发现的两种方法:
方法四:
x = x + y - (y = x);
方法五:
x = y + (y = x) *0;
这两种方法利用的是运算符的优先级,
目前没发现哪里会爆炸。
根据方法四与方法五原理,
推出方法六:
x = y * x / ( y = x);
不过,根据计算机计算的原理,做加法运算会更快一些。