Java中的i++和++i

今天看代碼突然發現在for循環中,有人用i++,有人用++i,這兩個有什麼區別呢? 平常也沒注意過,一般習慣寫i++,就比如:

for (int i = 0; i < 10; i++){
    System.out.println(i);
}

java基礎知識會告訴我們 i++ 是先賦值然後自加1,比如說:

int a, i = 1;
a = i++;

那麼先把i的值賦值給a,然後i= i+1;
類比++i的值應該就是先自增,然後在賦值。

但是你看下面的這幾行代碼,值是幾呢?

int a = 0;
for (int i = 0; i < 99;i++){
    a = a++;
}
System.out.println(a);

可能你想不都想結果就是98,其實不對,結果是0.

我看別人的博客上說,a++其實會有類似中間變量賦值的過程,就像下面這樣:

int temp = a;
a = a +1;
a = temp;

如果真的是這樣,那麼上面就說的通了,具體是不是我沒反編譯,不清楚,不過可以這麼理解。

再說上面的fou循環,既然i++會產生一箇中間變量,那麼肯定就會出現效率問題,經過試驗,也確實如此:

long time1 = System.currentTimeMillis();
int a = 0;
for (int i = 0; i < 100000;i++){
   a = i + 1;
}
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);

for (int i = 0; i < 100000; i++){
    a =  i + 1;
}
long time3 = System.currentTimeMillis();
System.out.println(time3 - time2);

時間是一個2, 一個1,數據越多,差別越大!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章