Java中i++與++i的區別,如何分清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;

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