这是一道面试题:请实现两个变量内容的互换
例如:
int a = 10;
int b = 20;
希望得到的结果是:
a=20
b=10
下面直接看代码(代码中呈现了处理的几种方式):
/**
* 面试题:
* 请自己实现两个正数变量交换
* @author wangjg
*
*/
public class OperatorTest1 {
public static void main(String[] args) {
// 方式1:使用第三方变量
System.out.println("第一种方式==========================");
int a = 10;
int b = 20;
System.out.println("初始值:a:"+a+",b:"+b);
int c = 0;
c = a;
a = b;
b = c;
System.out.println("结果: a:"+a+",b:"+b);
// 方式2:用加减法
System.out.println("第二种方式==========================");
int x = 10;
int y = 20;
System.out.println("初始值:x:"+x+",y:"+y);
x = x + y;
y = x - y;
x = x - y;
System.out.println("结果:x:"+x+",y:"+y);
// 方式3:用异或实现,面试使用,一个数被同一个数异或两次还是它自己
System.out.println("第三种方式==========================");
int i = 10;
int j = 20;
System.out.println("初始值:i:"+i+",j:"+j);
i = i ^ j;
j = i ^ j;
i = i ^ j;
System.out.println("结果:i:"+i+",j:"+j);
// 一句话搞定
b = (a+b) - (a=b);
// 开始a为10,b为20
// 1、运行a+b为30,表达式为 b = 30 - (a=b),此时a为10, b为20
// 2、运行a=b,表达式为 b = 30 - 20,此时a为20,b为10
// 3、运行30-20,结果a为20,b为10;
}
}
结果:
第一种方式==========================
初始值:a:10,b:20
结果: a:20,b:10
第二种方式==========================
初始值:x:10,y:20
结果:x:20,y:10
第三种方式==========================
初始值:i:10,j:20
结果:i:20,j:10