class TestExer1
{
public static void main(String[] args)
{
int m=12;
int n=5;
System.out.println("m:"+m+"\n"+"n:"+n);
System.out.println("这是方法一");
//方法一:提供一个临时变量
int temp=m;
m=n;
n=temp;
System.out.println("m:"+m+"\n"+"n:"+n);
System.out.println("这是方法二");
//方法二,当m和n较大时,有可能出现精度损失
m=m+n;//m=12+5
n=m-n;//n=17-5
m=m-n;//m=17-12
System.out.println("m:"+m+"\n"+"n:"+n);
System.out.println("这是方法三");
//方法三:可以解决上述方法的缺点,但比较难以理解
m=m^n;
n=m^n;//(m^n)^n==m,即将m赋值给n
m=m^n;//(m^n)^m==n,即将n赋值给m
System.out.println("m:"+m+"\n"+"n:"+n);
}
}
其运行结果如下图:
针对第三种方法,即使用异或(^),将2个值进行交换。可通过画图,将其数字变为2进制,进行理解。如下图所示:
这里m=12,n=5,两者异或(m^n),(12 ^ 5)结果为9,再异或一个5(m ^ n) ^n,(12 ^ 5) ^5则得12,即(m ^ n) ^n== m
同理可得,(m ^ n)^m==n