java中i=i++和j=i++的区别小结
i=i++;j=i++的区别
i=i++-----------在java中 这个语句的前后顺序应该是这样的(tmp=i;i++;tmp==i)
java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情况:
i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。
看看i=i++的情况:
i的原始值存放在后开辟的内存中,给刚开始的i进行自加,最后再将后面内存中的i赋给刚开始的i.
我们来看看这两个程序反编译的结果
这个是i=i++;
1: iconst_0 整型常量值0进栈
2: istore_1 将栈顶整型数值存入第二个局部变量
3: iload_1 第二个整型局部变量进栈
4: iinc 1, 1 指定整型变量增加指定值
5: istore_1 将栈顶整型数值存入第二个局部变量
j = i++;
反编译后是这样的
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中i=i++和j=i++区别的文章就介绍到这了,更多相关java i=i++和j=i++区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341