问题:
在不使用中间变量的前提下,请问如何交换两个变量的值?
解答:
这属于经典的入门级面试题,其实答案有多种。
第一类方法也是常用的方法,使用最简单的加减法。
<blockquote>
public void swap(int a,int b){
a=a+b;
b=a-b;
a=a-b;
}
</blockquote>第二类方法和第一种类似,但使用的是乘除法,其实乘除法只是加减法的变种。
<blockquote>
public void swap(int a,int b){
a = a * b;
b = a / b;
a = a / b;
}
</blockquote>第三类方法使用异或实现交换,异或的原理就是如果2个数中对应的位上相同为0,相异为1,即任何数异或上其本身为0, 而任何数和 0 异或还是任何数。
<blockquote>
public void swap(int a,int b){
a ^= b; //a=a^b
b ^= a; //b=b(ab)=bab=bba=0^a=a
a ^= b; //a=(ab)a=aba=aab=0^b=b
}
</blockquote>
推荐阅读