自增操做符(++)和自減操做符(--)是對變量進行加1和減1的操做。程序員
++和--是對變量進行自增1和自減1的簡寫操做符。許多編程任務中常常須要對變量加1或者減1,因此採用這兩個操做符會方便許多。例如,下面的代碼是對i自增1,而對j自減1:面試
int i = 3, j = 3; i++; // i become 4 j--; // j become 2
i++讀爲i加加,i--讀爲i減減。這些操做符分別稱爲後置自增操做符和後置自減操做符,由於操做符++和--放在變量後面。這些操做符也能夠放在變量前面,好比:編程
int i = 3, j = 3; ++i; // i becomes 4 --j; // j becomes 2
--i將i增長1,--j將j減去1。這些操做符稱爲前置自增操做符和前置自減操做符。數據結構
如你所見,前面的例子中,i++和++i的效果,或者i--和--i的效果是同樣的。然而,當用在表達式中不單純只進行自增和自減時,他們就會產生不一樣的效果。具體以下表,描述了自增和自減操做符的不一樣之處,而且給出了示例:學習
操做符spa |
名稱設計 |
描述code |
示例(假設i=1)blog |
++varci |
前置自增 |
將var加1,在語句中使用新的var值 |
Int j = ++i; // j is 2, i is 2 |
var++ |
後置自增 |
將var加1,可是在語句中使用原來的var值 |
Int j = i++; // j is 1, i is 2 |
--var |
前置自減 |
將var減1,在語句中使用新的var值 |
Int j = --i; // j is 0, i is 0 |
var-- |
後置自減 |
將var減1,可是在語句中使用原來的var值 |
Int j = i--; // j is 1, i is 0 |
下面演示前置形式的++(或者--)和後置形式的++(或者--)的補充示例。考慮如下代碼:
int i = 10;
int newNum = 10 * i++; //左邊等價於---》 int newNum = 10 * i; System.out.print("i is " + i //接上條 i = i + 1; + ", newNum is " + newNum);
執行輸出:
i is 11, newNum is 100
上述中i自增1,而後返回i原來的值來參與乘法運算。這樣,newNum的值就爲100。若是以下所示將i++換爲++i:
int i = 10; int newNum = 10 * (++i); //左邊等價於---》 i = i + 1; System.out.print("i is " + i //接上條 int newNum = 10 * i; + ", newNum is " + newNum);
執行輸出:
i is 11, newNum is 110
上述中 i自增1,而後返回i的新值,並參與乘法運算。這樣,newNum的值就爲110。
下面是另外一個例子:
double x = 1.0; double y = 5.0; double z = x-- + (++y);
在這三行程序執行完以後,y的值爲6.0,z的值爲7.0,而x的值爲0.0。
Java中從左到右對操做數求值。在右邊操做數的任何部分被求值以前,二元操做符左邊的操做數先求值。這一規則的優先級高於表達式的任何其餘規則。下面是一個例子:
int i = 1; int k = ++i + i * 3; // 分析可知: ++i求值後返回2。當求i*3的值時,i是2。所以k的值是8。 //------------對比如下代碼------------------ int i = 1; int k = i*3 + ++i ; // 分析可知:從左往右,當求i*3的值時,i是1,後算++i,++i總體是2。所以k的值是5。
自增在平時的Java筆試和麪試中常常做爲考查程序員的基礎題屢次出現,也是比較容易混淆的知識點。在平時編程中使用自增操做符和自減操做符可使表達式更加簡短,但也會使他們比較複雜且難以讀懂。應該避免在同一個表達式中使用這些操做符修改多個變量或屢次修改同一個變量,如int k = ++i + i * 3。
本文摘自《Java語言程序設計與數據結構》(基礎篇)第11版第2章2.14節內容,並由本人結合實例並補充擴展了一些實例代碼,本文用於本人學習及經驗總結。如需轉載(非商業用途)請註明原做者(梁勇)及本文說明中涉及事項。