Java中i++與++i的區(qū)別和使用
書上對(duì) i ++ 和 ++ i 的解釋如下:
int i = 3,a = 0 ;
i ++ : 先賦值再運(yùn)算;例如:a = i ++; 先賦值 a = i ,再運(yùn)算 i = i + 1 ;所以輸出結(jié)果為 a ==3;
++ i : 先運(yùn)算再賦值;例如:a = i ++; 先運(yùn)算 i = i + 1 ,再 賦值 a = i ;所以輸出結(jié)果為 a ==4;
懂了嗎?我想大部分人會(huì)跟我一樣 一臉懵逼,明明都 + 1 了,咋上面輸出結(jié)果是 3 下面就是 4 呢?哈哈~不要著急,接下來我將分享一下我對(duì)它們的理解,希望對(duì)你們有幫助。
認(rèn)識(shí)“++”與“--”
“++”與“--”分別稱作自增操作符和自減操作符,是對(duì)變量進(jìn)行加 1 和減 1 的操作符。
認(rèn)識(shí) i + + 與 i - -
i++讀為 i 加 加,i--讀為 i 減減,這些操作符分別稱為后置自增操作符和后置自減操作符。
以 i++為例,先來介紹一下i++, i++ 的計(jì)算方法分為以下5個(gè)步驟
- 先開批一個(gè)臨時(shí)存儲(chǔ)區(qū)
- 將 i 的值復(fù)制到存儲(chǔ)區(qū)
- i 自身+1
- 臨時(shí)存儲(chǔ)區(qū)的值等待被調(diào)用(參與運(yùn)算、輸出、賦值)
- 若 i 被調(diào)用則輸出值為 i ,否則輸出 i++
圖解如下:
接下來我會(huì)舉例說明
public class test{ public static void main(String[] args){ int i = 3; /* 創(chuàng)建一個(gè)變量i,里面放i的初始值3,先開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為3 */ i ++;//i自身加1,此時(shí)i的值為4 System.out.print(i);//打印輸出i,因?yàn)閕沒有被調(diào)用,故輸出i自身的值4 System.out.print(i++); /* 上一行代碼中i的值已經(jīng)變成了4,再開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為4,i自身的值+1變?yōu)?; i++被輸出調(diào)用,故輸出存儲(chǔ)區(qū)的值4 */ int j = i++; System.out.print(j); /* 上一行代碼中i的值已經(jīng)變成了5,再開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為5,i自身的值+1變?yōu)?; i++被賦值調(diào)用,故輸出存儲(chǔ)區(qū)的值5 */ System.out.print(i);//沒被調(diào)用,故打印值為i自身的值6 i = i++; System.out.print(i); /* 上一行代碼中i的值已經(jīng)變成了6,再開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為6,i自身的值+1變?yōu)?; i++被賦值調(diào)用,故輸出存儲(chǔ)區(qū)的值6 */ i = i++; System.out.print(i); /* 上一行代碼中i的值為6,再開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為6,i自身的值+1變?yōu)?; i++被賦值調(diào)用,故輸出存儲(chǔ)區(qū)的值6 */ } }
同理可得 i - - 的計(jì)算方法如下,
- 先開批一個(gè)臨時(shí)存儲(chǔ)區(qū)
- 將 i 的值復(fù)制到存儲(chǔ)區(qū)
- i 自身 -1
- 臨時(shí)存儲(chǔ)區(qū)的值等待被調(diào)用(參與運(yùn)算、輸出、賦值)
- 若 i 被調(diào)用則輸出值為 i ,否則輸出 i - -
舉例說明
public class test01{ public static void main(String[] args){ int i = 5; /* 創(chuàng)建一個(gè)變量i,里面放i的初始值5,先開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為5 */ i--;//i自身減1,此時(shí)i的值為4 System.out.println(i);//打印輸出i,因?yàn)閕沒有被調(diào)用,故輸出i自身的值4 System.out.print(i--); /* 上一行代碼中i的值已經(jīng)變成了4,再開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為4,i自身的值-1變?yōu)?; i--被輸出調(diào)用,故輸出存儲(chǔ)區(qū)的值4 */ int j = i--; System.out.print(j);//3 /* 上一行代碼中i的值已經(jīng)變成了4,再開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為4,i自身的值-1變?yōu)?; i--被賦值調(diào)用,故輸出存儲(chǔ)區(qū)的值3 */ System.out.print(i);//沒被調(diào)用,故打印值為i自身的值3 i = i--; System.out.print(i);//2 /* 上一行代碼中i的值已經(jīng)變成了3,再開辟一個(gè)臨時(shí)存儲(chǔ)區(qū), 將i的值復(fù)制到存儲(chǔ)區(qū),此時(shí)存儲(chǔ)區(qū)里面i的值為3,i自身的值-1變?yōu)?; i--被賦值調(diào)用,故輸出存儲(chǔ)區(qū)的值2 */ } }
認(rèn)識(shí)+ + i 與 - - i
++i 讀作加加i,--i讀作減減i,分別稱作前置自增操作符和前置自減操作符。
相對(duì)于i++來說,++i 的運(yùn)算思路比較簡(jiǎn)單,只進(jìn)行簡(jiǎn)單的+1操作即可。
舉例說明:
public class test{ public static void main(String[] args){ i = 1; j = i++ + ++i + ++i + i++; // 1 3 4 4 /* i++: 賦值調(diào)用,故打印值為1,臨時(shí)存儲(chǔ)區(qū)放的值為2 ++i:i的值+1,故值為3 ++i:i的值+1,故值為4 i++:賦值調(diào)用,故輸出臨時(shí)存儲(chǔ)區(qū)的值4,i自身值+1為5 */ System.out.print(j);//故輸出結(jié)果為12 System.out.print(i);//沒有參與調(diào)用,故輸出i自身的值5 System.out.print(++i);//輸出值為6
同理,--i ,也只是在自身基礎(chǔ)上- 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 } }
使用自增操作符和自減操作符可以使表達(dá)式更加簡(jiǎn)短,但也會(huì)使它們比較復(fù)雜且難以讀懂。比如上述代碼中出現(xiàn)的 j = i++ + ++i + ++i + i++; 只是為了測(cè)試大家是否更好的掌握了i ++與 ++ i,但在實(shí)際編程過程中應(yīng)該避免。
我的總結(jié)如下:
- i++、i-- :若參與調(diào)用,輸出值不 +1,否則 +1
- ++i、--i :無論是否參與調(diào)用,輸出值均 +1
- 希望大家在讀懂我上述描述的基礎(chǔ)上,再合理運(yùn)用這兩句話 ~
附:文章開頭那道題,現(xiàn)在用我的方法來做,是不是易如反掌啦~
int i = 3,a = 0 ;
i ++ : 例如:a = i ++;因?yàn)橘x值調(diào)用了,所以輸出值為臨時(shí)存儲(chǔ)區(qū)先復(fù)制的i的值,即 a ==3;
++ i : 例如:a = i ++; 輸出結(jié)果直接 +1 即結(jié)果為 a ==4;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)的Excel列號(hào)數(shù)字與字母互相轉(zhuǎn)換功能
這篇文章主要介紹了Java實(shí)現(xiàn)的Excel列號(hào)數(shù)字與字母互相轉(zhuǎn)換功能,涉及java針對(duì)Excel相關(guān)數(shù)值與字符串操作技巧,需要的朋友可以參考下2018-03-03java使用udp實(shí)現(xiàn)簡(jiǎn)單多人聊天功能
這篇文章主要為大家詳細(xì)介紹了java使用udp實(shí)現(xiàn)簡(jiǎn)單多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02通過簡(jiǎn)易例子講解Java回調(diào)機(jī)制
這篇文章主要介紹了通過簡(jiǎn)易例子講解Java回調(diào)機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java 序列化詳解及簡(jiǎn)單實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了 Java 序列化詳解及簡(jiǎn)單實(shí)現(xiàn)實(shí)例的相關(guān)資料,使用序列化目的:以某種存儲(chǔ)形式使自定義對(duì)象持久化,將對(duì)象從一個(gè)地方傳遞到另一個(gè)地方,需要的朋友可以參考下2017-03-03Spring Cloud Admin健康檢查 郵件、釘釘群通知的實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Admin健康檢查 郵件、釘釘群通知的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08