A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 阿里云 于 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,如果使用中遇到问题就看上面的实现过程吧,应该能很快找到出现问题的原因。
游客,如果您要查看本帖隐藏内容请回复


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马