java中 i = i++和 j = i++ 的區別


  由於i++和i--的使用會導致值的改變,所以在處理后置的++和--的時候,java的編譯器會重新為變量分配一塊新的內存空間,用來存放原來的值,

而完成賦值運算之后,這塊內存會被釋放。

 

(1)對於j = i++的情況

  i的原始值存放在后開辟的內存中,最后將這個值賦給j,進行j = i++運算之后,j會得到i的值,而i又將自加,所以,在釋放內存之后,原來存放j和i的地方將得到的值分別是:j(此時的值等於初始i的值)和i(i自加后的值)。

	public static void main(String args[])
	{
		int j = 0;
		int k = 0;
		for(int i = 0; i < 100; i++)
		{
			j = k++;
		}
		System.out.println(j);
	}

  運行結果是99。接下來對其進行分析:

  每一次的循環結束,用來保存i的原始值的內存的數據會被銷毀,然后i的新的值又會被放在一段新的內存中,在進行上述的循環,所以最終能夠實現j的數據的增加。

 

 (2)對於i = i++的情況

   

總結:

  Java編譯器每次遇到自增(指的是i++)、自減(指的是i--)運算符的時候都會開辟一塊新的內存空間來保存賦值之前j的值,即為緩存變量,然后再將這個換成變量的值賦給左邊的變量。

擴展:

  微軟的windows下的visualstudio編譯的結果和java不同,但在gcc等其他的c語言編譯器下,結果和java是一樣的,千萬要注意,由於有些人使用的是c語言的編譯器但不是windows下的編譯器,結果仍然和java的一致,但在windows下的編譯運行結果卻不一樣,希望能引起讀者的注意。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM