首先一段代碼:
- public static void main(String [] args){
- int i = 0;
- i=i++;
- System.out.println("i="+i);
- int j = 0;
- j=i++;
- System.out.print("j="+j+" i="+i);
- }
運行結果:
i=0
j=0 i=1
java語言規範裏對與++是這樣說的:The result of the postfix increment expression is not a variable, but a value.即:++表達式結果是個值,而不是變量。
變量?值?
這是java特殊的地方,對於這裏,java有兩個存儲區,一個是暫存區(堆棧),一個是變量區,
拿“j=i++(i和j初始爲0) ”解釋下,第一步,把i值存起來,有兩個,暫存區:0,變量區:0;第二步:進行i++,i 暫存區還是0,變量區變爲1了(也就是說進行完i++後,打印i的值,那麼i值爲1,打印的是變量的值,即變量區的值,爲1沒問題)。第三步:進行給j賦值,賦的是i++的值,i++的值是0!爲什麼呢?之前說了,他是個值,不是變量,那麼i++運行完後i++的值就應該從暫存區去取,暫存區存的是0,那麼他就是0。i=i++也能解釋通了。