不使用第三方变量的情况下交换两个数值

不使用第三方变量的情况下交换两个数值

三种思路

1. 通过加减运算变换两个整数的值,利用两数之和减去另一个数的方式(此方法有局限性,如果两个数的数值过大,会超出范围造成数据丢失精度,数据发生变化)

public class Test {
	// 算术运算
    public static void main(String[] args) {
        int a = 6, b = 10;
        // a = 10
        a = b - a;
        // b = 20
        b = b - a;
        // a = 30
        a = a + b;
        System.out.println("算术运算:a=" + a + "   b=" + b);
    }
}

运行结果

算术运算:a=10 b=6

2. 通过位运算符异或(^)操作,利用任何数与0进行异或操作后的结果都为该数本身的特性

public class Test {
    // 异或运算(转为2进制计算,值相同为0,不同为1)
    public static void main(String[] args) {
        int a = 6; // a:0000 0110
        int b = 10; //b:0000 1010
        // a:0000 1100  12
        a = a ^ b;
        // b:0000 0110  6
        b = a ^ b;
        // a:0000 1010  10
        a = a ^ b;
        System.out.println("异或运算:a=" + a + "   b=" + b);
    }
}

运行结果

异或运算:a=10 b=6

3. 用变量本身交换数值

public class Test {
    // 用变量本身交换数值
    public static void main(String[] args) {
        int a = 6,b = 10;
        // 直接把b赋值给a 再用总和减a拿到b
        // b = (a+b) - (a=b);
        // a赋值给b加0  b赋值给a
        b = a + (a = b) * 0;
        System.out.println("变量本身交换数值:a=" + a + "   b=" + b);
    }
}

运行结果

变量本身交换数值:a=10 b=6


版权声明:本文为Mr_Gaojinchao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。