情况1.
新增一个中间变量(容易理解,在开发中常用,不会产生歧义,便于程序员之间的交流。 但在面试中使用,似乎显得低端)
int a = 5;
int b = 6;
int c = a;//先把a赋值给一个空的容器中
a = b;//a = 6
b = c;//c就是a的值5
System.out.println("a的值为: " + a + " b的值为: " + b);
情况2.
按位异或(只能是整数,常问面试)
int a = 5;
int b = 6;
a = a ^ b;
b = a ^ b;//a ^ b ^ b = a = 6
a = a ^ b;//a ^ b ^ a = b = 5
System.out.println("a的值为: " + a + " b的值为: " + b);
*异或 相同为1 不同为0
通过异或运算能够使数据中的某些位翻转,其他位不变。
这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
即:a^b^b=a。
将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。
a = a ^ b --> 1010 ^ 1100 1001
b = a ^ b --> 1001 ^ 1100 1010
a = a ^ b --> 1001 ^ 1010 1100
情况3.
相加( 此算法与情况1相比多了些过程,但没有借助临时变量,常问面试)
int a = 5;
int b = 6;
a = a + b;//11
b = a - b;//a + b - b = a = 6
a = a - b;//a + b - a = b = 5
System.out.println("a的值为: " + a + " b的值为: " + b);
PS:以上是本人自学Java中的一些总结,不喜勿喷