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=

操作数栈的值从哪里来?

从局部变量表获取

赋值(=)操作的值从哪里来

运算后的数据会写入到局部变量表,最终的值就是局部变量表的值

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