Java中i++與++i的區別和使用
書上對 i ++ 和 ++ i 的解釋如下:
int i = 3,a = 0 ;
i ++ : 先賦值再運算;例如:a = i ++; 先賦值 a = i ,再運算 i = i + 1 ;所以輸出結果為 a ==3;
++ i : 先運算再賦值;例如:a = i ++; 先運算 i = i + 1 ,再 賦值 a = i ;所以輸出結果為 a ==4;
懂了嗎?我想大部分人會跟我一樣 一臉懵逼,明明都 + 1 了,咋上面輸出結果是 3 下面就是 4 呢?哈哈~不要著急,接下來我將分享一下我對它們的理解,希望對你們有幫助。
認識“++”與“--”
“++”與“--”分別稱作自增操作符和自減操作符,是對變數進行加 1 和減 1 的操作符。
認識 i + + 與 i --
i++讀為 i 加 加,i--讀為 i 減減,這些操作符分別稱為後置自增操作符和後置自減操作符。
以 i++為例,先來介紹一下i++, i++ 的計算方法分為以下5個步驟
- 先開批一個臨時儲存區
- 將 i 的值複製到儲存區
- i 自身+1
- 臨時儲存區的值等待被呼叫(參與運算、輸出、賦值)
- 若 i 被呼叫則輸出值為 i ,否則輸出 i++
圖解如下:
接下來我會舉例說明
public class test{ public static void main(String[] args){ int i = 3; /* 建立一個變數i,裡面放i的初始值3,先開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為3 */ i ++;//i自身加1,此時i的值為4 System.out.print(i);//列印輸出i,因為i沒有被呼叫,故輸出i自身的值4 System.out.print(i++); /* 上一行程式碼中i的值已經變成了4,再開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為4,i自身的值+1變為5; i++被輸出呼叫,故輸出儲存區的值4 */ int j = i++; System.out.print(j); /* 上一行程式碼中i的值已經變成了5,再開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為5,i自身的值+1變為6; i++被賦值呼叫,故輸出儲存區的值5 */ System.out.print(i);//沒被呼叫,故列印值為i自身的值6 i = i++; System.out.print(i); /* 上一行程式碼中i的值已經變成了6,再開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為6,i自身的值+1變為7; i++被賦值呼叫,故輸出儲存區的值6 */ i = i++; System.out.print(i); /* 上一行程式碼中i的值為6,再開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為6,i自身的值+1變為7; i++被賦值呼叫,故輸出儲存區的值6 */ } }
同理可得 i- - 的計算方法如下,
- 先開批一個臨時儲存區
- 將 i 的值複製到儲存區
- i 自身 -1
- 臨時儲存區的值等待被呼叫(參與運算、輸出、賦值)
- 若 i 被呼叫則輸出值為 i ,否則輸出 i - -
舉例說明
public class test01{ public static void main(String[] args){ int i = 5; /* 建立一個變數i,裡面放i的初始值5,先開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為5 */ i--;//i自身減1,此時i的值為4 System.out.println(i);//列印輸出i,因為i沒有被呼叫,故輸出i自身的值4 System.out.print(i--); /* 上一行程式碼中i的值已經變成了4,再開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為4,i自身的值-1變為3; i--被輸出呼叫,故輸出儲存區的值4 */ int j = i--; System.out.print(j);//3 /* 上一行程式碼中i的值已經變成了4,再開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為4,i自身的值-1變為3; i--被賦值呼叫,故輸出儲存區的值3 */ System.out.print(i);//沒被呼叫,故列印值為i自身的值3 i = i--; System.out.print(i);//2 /* 上一行程式碼中i的值已經變成了3,再開闢一個臨時儲存區, 將i的值複製到儲存區,此時儲存區裡面i的值為3,i自身的值-1變為2; i--被賦值呼叫,故輸出儲存區的值2 */ } }
認識+ + i 與 - - i
++i 讀作加加i,--i讀作減減i,分別稱作前置自增操作符和前置自減操作符。
相對於i++來說,++i 的運算思路比較簡單,只進行簡單的+1操作即可。
舉例說明:
public class test{ public static void main(String[] args){ i = 1; j = i++ + ++i + ++i + i++; // 1 3 4 4 /* i++: 賦值呼叫,故列印值為1,臨時儲存區放的值為2 ++i:i的值+1,故值為3 ++i:i的值+1,故值為4 i++:賦值呼叫,故輸出臨時儲存區的值4,i自身值+1為5 */ System.out.print(j);//故輸出結果為12 System.out.print(i);//沒有參與呼叫,故輸出i自身的值5 System.out.print(++i);//輸出值為6
同理,--i ,也只是在自身基礎上- 1即可。
舉例說明:
public class test01{ public static void main(String[] args){ int i = 5; --i; System.out.println(i);//i自身減1,值為4 System.out.print(--i);//i自身減1,值為3 } }
使用自增操作符和自減操作符可以使表示式更加簡短,但也會使它們比較複雜且難以讀懂。比如上述程式碼中出現的j = i++ + ++i + ++i + i++;只是為了測試大家是否更好的掌握了i ++與 ++ i,但在實際程式設計過程中應該避免。
我的總結如下:
- i++、i-- :若參與呼叫,輸出值不 +1,否則 +1
- ++i、--i :無論是否參與呼叫,輸出值均 +1
- 希望大家在讀懂我上述描述的基礎上,再合理運用這兩句話 ~
附:文章開頭那道題,現在用我的方法來做,是不是易如反掌啦~
int i = 3,a = 0 ;
i ++ : 例如:a = i ++;因為賦值呼叫了,所以輸出值為臨時儲存區先複製的i的值,即 a ==3;
++ i : 例如:a = i ++; 輸出結果直接 +1 即結果為 a ==4;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。