JAVA基礎--自增變量i++和++i

對於i++和++i主要是需要需要弄清楚局部變量表和操作數棧的作用,運算過程中數據是怎麼保存的。
先可以簡單理解爲:
i++是先使用值在加1(先將局部變量表的數據寫入到操作數棧後,再局部變量表加1)
++i是先加1再使用(先局部變量表加1,再將局部變量表的數據寫入到操作數棧)
=是賦值操作,是運算的最後一步,是直接從操作數棧計算好值後,覆蓋到局部變量表,就是我們最後的結果

下面舉幾個例子幫助理解:

例一

	public static void main(String[] args) {
		int i = 1;
		i = i++;
		int j = 1;
		i = i++;
		System.out.println("i=" + i);
		System.out.println("j=" + j);
	}

結果:

i=1
j=2

i=1解釋

int i = 1; 將1放入局部變量表。此時棧=null,變量表=1,
i = i++;;++在後面,先將局部變量表的數據寫入到操作數棧後,再局部變量表加1。此時棧=1,變量表=2,然後賦值(=)操作,將棧覆蓋到變量表,此時棧=1,變量表=1,結果是1

j=2解釋

int j = 1;將1放入局部變量表。此時變量表=1,棧=null
i = i++;++在後面,先局部變量表加1,再將局部變量表的數據寫入到操作數棧。此時棧=2,變量表=2,然後賦值(=)操作,將棧覆蓋到變量表,此時棧=2,變量表=2,結果是2

例二

	public static void main(String[] args) {
		int i = 2;
		int m = i++ * ++i;
		int j = 2;
		int n = ++j * j++;
		System.out.println("m=" + m);
		System.out.println("n=" + n);
	}

結果

m=8
n=9

m=8解釋

int i = 2; 將2放入局部變量表。此時棧=null,變量表=2
int m = i++ * ++i; 這個運算因爲有一個運算符乘(*)號,所以包括2個部分

  • i++先將局部變量表的數據寫入到操作數棧後,再局部變量表加1。此時棧=2,變量表=3
  • ++i先局部變量表加1,再將局部變量表的數據寫入到操作數棧。 此時棧=2&4,變量表=4

賦值(=)操作,將棧覆蓋到變量表,此時棧=8(2*4),變量表m=8,i=4,結果是8

n=9解釋

int j = 2;將2放入局部變量表。此時棧=null,變量表=2
int n = ++j * j++;這個運算因爲有一個運算符乘(*)號,所以包括2個部分

  • ++j先局部變量表加1,再將局部變量表的數據寫入到操作數棧。 此時棧=3,變量表=3
  • j++先將局部變量表的數據寫入到操作數棧後,再局部變量表加1。此時棧=3&3,變量表=4

賦值(=)操作,將棧覆蓋到變量表,此時棧=9(3*3),變量表n=9,j=4,結果是9

總結

局部變量表的數據從哪裏來?

數據初始化,int=1
賦值語句,從操作數棧覆蓋,i=

操作數棧的值從哪裏來?

從局部變量表獲取

賦值(=)操作的值從哪裏來

運算後的數據會寫入到局部變量表,最終的值就是局部變量表的值

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