记得很清楚,我人生的第一次面试,小胖就给我出了这个问题。
小胖:【如何交换两个变量的值?】
我:【借住第三个变量。】
小胖:【还有呢?】
我:【使用运算符。】
小胖:【还有吗?】
我:【没完了是吧,倒腾过来倒腾过去就这一个问题了是吧,脑子瓦特了。】
最后一句是我憋在心里的话,肯定不能说出来呀。实话实话,他一直问还有,的确搞得我有些心慌,面试处女秀啊!
下面就直接开始。
1、借助第三个变量(可以不看)
c = a;
a = b;
b = c;
2、运算符
a = a + b;
b = a - b;
a = a - b;
3、为运算符(一个数对另一个数字异或两次,该数不变)
a = a ^ b;
b = a ^ b;
a = a ^ b;
实例:
public class Swap {
public static void main(String[] args) {
int a = 3, b = 5;
temp(a, b);
arithmetic(a, b);
bit(a, b);
}
// 借助第三个变量
public static void temp(int a, int b) {
System.out.println("创建第三个变量前a=" + a + ",b=" + b);
int c = a;
a = b;
b = c;
System.out.println("创建第三个变量后a=" + a + ";b=" + b);
}
// 算数运算
public static void arithmetic(int a, int b) {
System.out.println("算数运算前a=" + a + ",b=" + b);
a = a + b;
b = a - b;
a = a - b;
System.out.println("算数运算后a=" + a + ",b=" + b);
}
// 位运算
public static void bit(int a, int b) {
System.out.println("位运算前a=" + a + ",b=" + b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("位运算后a=" + a + ";b=" + b);
}
}
运行结果:
创建第三个变量前a=3,b=5
创建第三个变量后a=5;b=3
算数运算前a=3,b=5
算数运算后a=5,b=3
位运算前a=3,b=5
位运算后a=5;b=3
位运算解析:
a = a ^ b;
a: 0 0 1 1
b: 0 1 0 1
a=a^b: 0 1 1 0
b = a ^ b;
a: 0 1 1 0
b: 0 1 0 1
b=a^b: 0 0 1 1
a = a ^ b;
a: 0 1 1 0
b: 0 0 1 1
a=a^b: 0 1 0 1
我是海蓝酱,分享技术,不止JAVA,喜欢就给我的文章点个赞👍🏻吧,感谢你们的支持!!
文章首发同名公众号:海蓝酱