i+=1和i=i+1

x=x+1,x+=1x++的效率哪個最高?爲什麼?

x=x+1最低,因爲它的執行如下。

(1)讀取右x的地址;

(2)x+1;

(3)讀取左x的地址;

(4)將右值傳給左邊的x(編譯器並不認爲左右x的地址相同)。

x+=1其次,它的執行如下。

(1)讀取x的地址;

(2)x+1;

(3)將得到的值傳給x(因爲x的地址已經讀出)。

x++最高,它的執行如下。

(1)讀取右x的地址;

(2)x自增1.

 

i=i+1i+=1完全等價嗎?

可能有很多程序員認爲i+=1只是i=i+1的簡寫方式,其實不然,它們一個使用簡單賦值運算,一個使用複合賦值運算,而 簡單賦值運算和複合賦值運算的最大差別就在於:複合賦值運算符會自動地將運算結果轉型爲其左操作數的類型。看看以下的兩種寫法,你就知道它們的差別在哪兒 了:


  (1) byte i=5;
      i+=1;


   (2) byte i=5;
      i=i+1;


     第一種寫法編譯沒問題,而第二種寫法卻編譯通不過。原因就在於,當使用複合賦值運算符進行操作時,即使右邊算出的結果是int類型,系統也會將其值轉化爲 左邊的byte類型,而使用簡單賦值運算時沒有這樣的優待,系統會認爲將i+1的值賦給i是將int類型賦給byte,所以要求強制轉換。理解了這一點 後,我們再來看一個例子:


  byte b=120;
  b+=20;
  System.out.println("b="+b);


   說到這裏你應該明白了,上例中輸出b的值不是140,而是-116。因爲120+20的值已經超出了一個byte表示的範圍,而當我們使用複合賦值運 算時系統會自動作類型的轉化,將140強轉成byte,所以得到是-116。由此可見,在使用複合賦值運算符時還得小心,因爲這種類型轉換是在不知不覺中 進行的,所以得到的結果就有可能和你的預想不一樣。

 

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