黑马程序员技术交流社区

标题: 两个变量竟然可以这样互换【石家庄黑马JavaEE基础06期分享】 [打印本页]

作者: 阿里云    时间: 2017-12-6 19:36
标题: 两个变量竟然可以这样互换【石家庄黑马JavaEE基础06期分享】
本帖最后由 阿里云 于 2017-12-6 21:00 编辑

        通常我们是这样完成变量交换的:
        
[Java] 纯文本查看 复制代码

        int a = 1;  
        int b = 2;  // 已知两个变量

        int temp = a; //定义临时变量
        a = b;
        b = temp;//利用临时变量完成了交换

        除了这样交换变量外,还有一种酷毙方式实现两个变量互换!{:8_492:}
        那就是通过异或运算符实现两个变量互换,不借助临时变量,减少系统资源的消耗。代码和分析如下:
[Java] 纯文本查看 复制代码

        int a = 1;  // 0000 0001
        int b = 2;  // 0000 0010

        // 异或: 相同为false, 不同为true.
        // 在二进制中, 按位异或的操作, 值相同为0, 值不同为1

        a = a ^ b;
        /*
        0000 0001
        0000 0010
        --------- ^
        0000 0011 a
         */

        b = a ^ b;
        /*
        0000 0011
        0000 0010
        --------- ^
        0000 0001 b
         */

        a = a ^ b;
        /*
        0000 0011
        0000 0001
        --------- ^
        0000 0010 a
         */

        System.out.println(a);  // 0000 0010, 即2
        System.out.println(b);  // 0000 0001, 即1

                 这种利用按位异或的操作, 不需要使用第三个变量, 节省了创建第三个变量的内存。只需要固定以下3个步骤:
                 a = a ^ b;
                 b = a ^ b;
                 a = a ^ b;
                 等号右边都一样,很容易记住!变量的类型可以是int、boolean,但是不能为double、char、String,如果使用中遇到问题就看上面的实现过程吧,应该能很快找到出现问题的原因。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2