美文网首页
Java 变量交换

Java 变量交换

作者: 久战王 | 来源:发表于2018-03-09 00:54 被阅读0次

    一:先声明temp为临时变量,先把a装进temp,temp=a,那么此时temp里面的值已经不存在了,但是不重要,本身temp本身的值没有意义。

    然后再a=b,那b的值装进a,此时a已经等于b值,a的值不存在,但是不重要,此时a值已经存在temp里了

    再然后,b=temp,那么ab两个变量在此时就转换完成了。

    总结:没有什么好处坏处,属于标准用法。

    *代码如下

    ···

            temp=a;

            a=b;

            b=temp;

    ···

    二:方法二不采用临时变量,直接在ab之间转换,弊端在于后期写程序如果数字过大超出int本身32位的值,ab相加容易爆。

    *代码如下

    ···

            int a=4;

            int b=7;

            b=a+b;        // a=4  b=11

            a=b-a;        // a=7  b=11

            b=b-a;        // a=7  b=4

    ···

    三:第三种转换形式运用到了位运算

    解读:自己异或自己 = 0            任何一个数跟 0 异或是自身,所以 a ^ b ^ a 等于 b,a 出现两个进行抵消,所以得出结果为 b。

    举例:自己异或自己 = 0 举例:自身异或 0 等于自身

    实例操作:

    int  a = 4

    int  b = 7

    我们先声明,a = 4        b = 7

    a = a ^ b;        那么a就等于 4 ^ 7        得出结果a = 4 ^ 7(在这个表达式中a的值本身我们是不知道的,所以当前a = 4 ^ 7)

    b = a ^ b;         那么前面本身a是等于4 ^ 7的,现在来看b的结果是b = 4 ^ 7 ^ 7   (解析,4 ^ 7是第一步得出来的结果, ^ 7是b当前本身的值,前面知识点提到异或概念就是两两抵消取最后奇数的值,所以当前b = 4)

    a = a ^ b;     现在来看,这句表达式当中的,a和b的值已经不再是ab最先本身的值了,通过前面第一步和第二部的异或位运算 a = a ^ b当中的(a ^ b 这两个值是已经变更了最先的本值,现在这里面的        a=4 ^ 7,b = 4 )    解析:a = 4 ^ 7 ^ 4 ^ 7 ^ 7    通过运用异或两两抵消最后得出值是7,(4 7 4 7 7将两个7抵消,两个4抵消,最后还剩下一个7这就是结果),所以运行结果a = 7   b = 4,在此完成了交换。

    *代码如下

    ···

            int  a = 4;

            int  b = 7;

            a = a ^ b;        //a = 4 ^ 7

            b = a ^ b;        //b = 4 ^ 7 ^ 7

            a = a ^ b;        //a = 4 ^ 7 ^ 4 ^ 7 ^ 7

    ···

    相关文章

      网友评论

          本文标题:Java 变量交换

          本文链接:https://www.haomeiwen.com/subject/gkeufftx.html