原文链接:http://blog.youkuaiyun.com/SO_zxn/article/details/79166249
近期看到了java异或的特征:一个数连续两次异或一个数,则不改变原大小,所以想到了用这个原则可以实现不利用第三变量实现对两个数值的交换。
下面就不多说了,直接上简单的代码案例更加直观:
package array;
/**
* 交换两个数值
* @author zxn
*
*/
public class ArrayDemo {
public static void main(String[] args) {
exchange1(3, 4);
exchange2(5, 6);
}
/**
* 用异或的方法交换两个数值,这种方法高效,但是不直观。
* @param a
* @param b
*/
public static void exchange1(int a , int b) {
System.out.println("a="+a+":"+"b="+b);
a=a^b;
b=a^b;
a=a^b;
System.out.println("a="+a+":"+"b="+b);
}
/**
* 用第三变量实现量数值的交换,此方法直观,但不高效
* @param a
* @param b
*/
public static void exchange2(int a,int b) {
System.out.println("a="+a+":"+"b="+b);
int c=a;
a=b;
b=c;
System.out.println("a="+a+":"+"b="+b);
}
}
至于如何选择根据个人和团队水平,毕竟代码也需要给其他人看