Java之戳中痛點 - (4)i++ 和 ++i 探究原理


先看一個例子:

package com.test;

public class AutoIncrement {

public static void main(String[] args) {
  int a=7;
  System.out.println(++a);
  System.out.println(a);
  int b=7;
  System.out.println(b++);
  System.out.println(b);
}
}

結果也如預期的一樣:

是不是回憶起大學老師講的規則:自增有兩種方式,分別是i++和++i;i++表示先賦值后加1;++i表示先加1再賦值;

那還有啥好講的?(**上面的規則是片面的**)

那下來咱們看一個例子:

package com.test;

public class AutoIncrement {
    public static void main(String[] args) {
        int c = 0;
        for(int i=0;i<10;i++){
            c = c++;
        }
        System.out.println(c);
    }
}    

最后結果是多少?答案等於10?我可以肯定的告訴你錯了,答案是0,這是為什么?

下面咱們講一下Java是怎么樣處理自增的:
i++ 和 ++i原理

i++ 即后加加,原理是:先自增,然后返回自增之前的值

++i 即前加加,原理是:先自增,然后返回自增后的值

重點:這是一般人所不知道的,記住:不論是前++還是后++,都有個共同點是先自增

1) ++i 原理,等價於

    i = i+1;
    return i;

2) i++ 原理,用代碼分析表示如下:
    int temp = i;
    i = i + 1;
    return temp;
    這3句代表就是上面所說的那樣:i++是先自增,然后返回自增之前的值;

 

PS:不同語言對自增的處理不太一樣: 在C++中,“count=count++”與“count++”等價;在Java,PHP中處理方式如上述解析;不同語言,自己可以測試一下

PS:關於執行效率的認識:

i++:取出i,復制i,增加i,返回副本;
++i:取出i,增加i,返回i;
i++要增加一個副本,無疑是要多耗內存,當然效率要低一點,當然只是一丟丟罷了,根本不會對程序運行有明顯的影響。

我看過一篇博客,作者的主旨是兩者的效率一樣,地址 http://www.cnblogs.com/anrainie/p/6610379.html

表示有距離感0.0,個人認為JVM也在不斷優化,具體有待研究...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM