【小常奇妙历险记之Java世界】第二回:智辨双胞胎兄弟a++和++a

嘿嘿,好久不见!想必很多刚接触Java的同学都被这两个双胞胎兄弟弄得晕头昏脑。今天,小常就和大家一起聊聊这个问题~

好多同学都会感觉它们很相似所以经常会混淆。不要慌,今天小常带你彻底解决!从此告别烦恼!(哈哈哈哈哈好像去屑洗发水的广告啊)

首先,我们应该知道它们确实是有共同点的:不管是a++还是++a,在运行时都是以a+1的结果进行的。

那么他们又有什么不同呢?

我们先从哥哥a++说起。

我们运行a++时分为三步:1、开辟一个临时存储区。

                                               2、将x区域本身的值赋给临时存储区。

                                               3、给x区域本身加1。

注意!!!通常我们调用a++的值(输出,进行下一步运算等)是临时存储区的值,不是x区域的值。

好了,我们再看看弟弟++a吧!

弟弟年纪尚小,所以思维简单,直接给x本身的值加1就可以直接运算啦!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

上面我们看了两兄弟的定义差别,接下来我们通过一段代码来加深理解吧!

class Test05{
    public static void main(String[] args){
        /* 
        i++
        1.先开辟一个临时存储区
        2.将i的值复制到存储区
        3.i自身+1
        4.临时存储区的值等待被调用(参与运算,输出,赋值)
        */
        int i=3;
        i++;
        System.out.println(i);  //4
        System.out.println(i++);//4
        int j=i++;
        System.out.println(j);  //5
        System.out.println(i);  //6
        i=i++;
        System.out.println(i);  //6
        i=i++;
        System.out.println(i);  //6
        
        i=1;
        j= i++ + ++i + ++i + i++;
        // 1     3     4    4
        System.out.println(j); 
        System.out.println(i); 
        int a=3;
        a=a+3;
        a+=3;
        a=a+1;
        a+=1;
        ++a;
        a++;
        short s=3;
        //不兼容的类型: 从int转换到short可能会有损失
        //s=s+3;
        s+=3;
        System.out.println(s);
        a=1;
        System.out.println(a++==1);
        
        int m=7;
        int n=11;
        System.out.println(m&n);    //3
        /*
            0111
            1011
           &0011 3
        */
        System.out.println(m|n);    //15
        /*
            0111
            1011
           |1111 15
        */
        System.out.println(m^n);    //12
        /*异或:不同为真 相同为假
            0111
            1011
           ^1100 12
        */
        System.out.println(m>>2);   //1
        /*
            0111
              01 11
        */
        System.out.println(m<<2);   //28
        /*
            0111
          011100
        */
        System.out.println(0b10010101>>3);
        //10010
        System.out.println(0b10010101<<3);
        //10010101000
        //x>>y x/2^y
        //x<<y x*2^y  
    }
}
发布了4 篇原创文章 · 获赞 3 · 访问量 89

猜你喜欢

转载自blog.csdn.net/m0_46292449/article/details/104334588
今日推荐