書上對 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 自身+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
}
}
我的總結如下:
i++、i-- :若參與調用,輸出值不 +1,否則 +1
++i、--i :無論是否參與調用,輸出值均 +1
希望大家在讀懂我上述描述的基礎上,再合理運用這兩句話 ~
附:文章開頭那道題,現在用我的方法來做,是不是易如反掌啦~
int i = 3,a = 0 ;
i ++ : 例如:a = i ++;因爲賦值調用了,所以輸出值爲臨時存儲區先複製的i的值,即 a ==3;
++ i : 例如:a = i ++; 輸出結果直接 +1 即結果爲 a ==4;