今天看代碼突然發現在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,數據越多,差別越大!