转载自:http://blog.csdn.net/ylyg050518/article/details/48005077
在Java中大致有如下四种方法可以用于变量的交换。
1.中间变量法
方法大致结构如下:
int a,b,temp;
a=10,b=20;
temp=a;
b=temp;
a=b;
当然这种方法不仅限于整形变量,任意类型都是可以的,这是日常开发中经常用的交换变量值的方法,也是推荐使用的方法,在没有其他特定要求的情况下,这种方法最易于理解。
2.算数运算法
int a,b;a=10;b=20;
a=b-a; //a=10;b=20
b=b-a; //a=10;b=10
a=b+a; //a=20;b=10
它的原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。
具体过程:第一句“a=b-a”求出ab两点的距离,并且将其保存在a中;第二句“b=b-a”求出a到原点的距离(b到原点的距离与ab两点距离之差),并且将其保存在b中;第三句“a=b+a”求出b到原点的距离(a到原点距离与ab两点距离之和),并且将其保存在a中。完成交换。
此算法与标准算法相比,多了三个计算的过程,但是没有借助临时变量。
缺点:是只能用于数字类型,字符串之类的就不可以了。a+b有可能溢出(超出int的范围),溢出是相对的, +了溢出了,-回来不就好了,所以溢出不溢出没关系,就是不安全。
a=a^b; //a=0110^b=1100;
b=a^b; //a=0110^b=1010;
a=a^b; //a=1100=12;b=1010;
此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
3.位运算
int a=10,b=12; //a=1010^b=1100;a=a^b; //a=0110^b=1100;
b=a^b; //a=0110^b=1010;
a=a^b; //a=1100=12;b=1010;
此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。