java交换两个变量的值,不借助第三个变量

182 阅读2分钟

记得很清楚,我人生的第一次面试,小胖就给我出了这个问题。

小胖:【如何交换两个变量的值?】

我:【借住第三个变量。】

小胖:【还有呢?】

我:【使用运算符。】

小胖:【还有吗?】

我:【没完了是吧,倒腾过来倒腾过去就这一个问题了是吧,脑子瓦特了。】

最后一句是我憋在心里的话,肯定不能说出来呀。实话实话,他一直问还有,的确搞得我有些心慌,面试处女秀啊!

下面就直接开始。

1、借助第三个变量(可以不看)

c = a;
a = b;
b = c;

2、运算符

aa + b;
ba - b;
a = a - b;

3、为运算符(一个数对另一个数字异或两次,该数不变)

a = ab;
b = ab;
a = ab;

实例:

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=3b=5
创建第三个变量后a=5b=3

算数运算前a=3b=5
算数运算后a=5b=3

位运算前a=3b=5
位运算后a=5b=3

位运算解析:

a = a ^ b;
a0 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^b0 0 1 1

a = a ^ b;
a:     0 1 1 0
b:     0 0 1 1
a=a^b0 1 0 1

我是海蓝酱,分享技术,不止JAVA,喜欢就给我的文章点个👍🏻吧,感谢你们的支持!!

文章首发同名公众号:海蓝酱