开发者社区> 技术小胖子> 正文

Java i=i++值的问题的解答 反编译

简介:
+关注继续查看

  今天有朋友问我这样的一个问题。


  1.  /** 
  2. * @author lihzh 
  3. * @date 2012-6-8 下午9:21:22 
  4. * @blog http://www.coderli.com 
  5. */ 
  6. ublic static void main(String[] args) { 
  7. int i = 0
  8. i = i++; 
  9. System.out.println(i); 

 打印的结果为什么是 0。

其实笔者一下也说不清楚,第一反应就是看看编译后的class文件。
 

  1. public static void main(java.lang.String[] args); 
  2.     0  iconst_0 
  3.     1  istore_1 [i] 
  4.     2  iload_1 [i] 
  5.     3  iinc 1 1 [i] 
  6.     6  istore_1 [i] 
  7.     7  getstatic java.lang.System.out : java.io.PrintStream [16

这就好解释了,查了一下,解释如下:

iconst_0,将int值0压入操作数栈 
istore_1,将栈顶的0弹出,赋给局部变量区1号索引的局部变量i 
至此完成int i = 0 
 
iload_1,将局部变量区1号索引的变量i值0压入操作数栈 
iinc 1 1,将局部变量区1号索引的值加1,操作数栈不发生变化 
istore_1,将栈顶的0弹出,赋给局部变量区1号索引的i 
至此完成i = i++,所以最后i的值为0 
 
 
iinc 指令是直接对局部变量区进行操作,操作数栈不发生任何变化,这是由JVM规范定义的。
 
本文出自OneCoder个人博客,转载请务必注明此链接:http://www.coderli.com/archives/java-i-jvm

     本文转自mushiqianmeng 51CTO博客,原文链接:http://blog.51cto.com/mushiqianmeng/929609,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
码神开源,War包反编译获得JAVA源码,竟然这样简单
码神开源,War包反编译获得JAVA源码,竟然这样简单
40 0
Java源码混淆,jar包加密,禁止反编译jar包
本文中介绍使用 XJar 对jar包进行加密。
840 0
Java - 修改 Jar 包源码(非反编译操作)
Java - 修改 Jar 包源码(非反编译操作)
867 0
Java编译和反编译那些事
挺久没更文章了,之前有一个月在面试,后来写了篇面经,有一些朋友找我交流问题,所以一直没时间写技术文章,估计以后更新文章频率不会那么高了,不过还是会定期分享的,我的目的还是希望我的每篇文章大家都能学到点东西基本概念我们可以通过javac命令将Java程序的源代码编译成Java字节码,即我们常说的class文件,这是我们通常意义上理解的编译但是,字节码并不是机器语言,要想让机器能够执行,还需要把字节码翻译成机器指令,这个过程是通过解释器实现的,叫解释执行在不同的虚拟机实现中,执行引擎在执行字节码的时候,通常会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两
92 0
Java 反编译工具的使用与对比分析(三)
Java 反编译工具的使用与对比分析
258 0
Java 反编译工具的使用与对比分析(二)
Java 反编译工具的使用与对比分析
301 0
Java 反编译工具的使用与对比分析(一)
Java 反编译工具的使用与对比分析
293 0
强烈推荐的一款 Java 反编译工具:JAD
强烈推荐的一款 Java 反编译工具:JAD
2271 0
阻止Java反编译蛋疼方法
public class landv { private static String companyName="landv测试"; public static void main(String[] args) { String params = "companyName=" + companyName ;//很蛋疼的发现有这个东东可以阻止反编译,呵呵哒 } }  网名:浩秦; 邮箱:root#landv.pw; 只要我能控制一個國家的貨幣發行,我不在乎誰制定法律。
707 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Java工程师必读手册
立即下载
Java应用提速(速度与激情)
立即下载
Java单元测试实战
立即下载