java i=i++和j=i++的区别

i=i++;j=i++的区别

i=i++-----------在java中 这个语句的前后顺序应该是这样的(tmp=i;i++;tmp==i)

java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情况:

 java i=i++和j=i++的区别_第1张图片

i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。

看看i=i++的情况:

 java i=i++和j=i++的区别_第2张图片

 

i的原始值存放在后开辟的内存中,给刚开始的i进行自加,最后再将后面内存中的i赋给刚开始的i.

 

 

我们来看看这两个程序反编译的结果

这个是i=i++;

 

 java i=i++和j=i++的区别_第3张图片

 

1:   iconst_0   整型常量值0进栈

2:   istore_1   将栈顶整型数值存入第二个局部变量

3:   iload_1  第二个整型局部变量进栈

4:   iinc    1, 1 指定整型变量增加指定值

5:   istore_1  将栈顶整型数值存入第二个局部变量

 j = i++;

 java i=i++和j=i++的区别_第4张图片

反编译后是这样的

7:   iconst_0  整型常量值0进栈

8:   istore_1  将栈顶整型数值存入第二个局部变量

9:   iconst_0  整型常量值0进栈

10:  istore_2 将栈顶整型数值存入第三个局部变量

11:  iload_2  第三个整型局部变量进栈

12:  iinc    2, 1 指定整型变量增加指定值

15:  istore_1  将栈顶整型数值存入第二个局部变量

你可能感兴趣的:(Java基础)