网上都说++i和i+=1两个不同:
++i是先在局部变量上+1,再入操作数栈
i+=1是先将局部变量先加入操作数栈,再进行+1
但是在jdk1.8的环境下在查看编译后的方法信息时,i+=1和++i的操作都是在局部变量中+1,再入的操作数栈,有没有哪位知道原因?

网上都说++i和i+=1两个不同:
++i是先在局部变量上+1,再入操作数栈
i+=1是先将局部变量先加入操作数栈,再进行+1
但是在jdk1.8的环境下在查看编译后的方法信息时,i+=1和++i的操作都是在局部变量中+1,再入的操作数栈,有没有哪位知道原因?

关注引自免费微信小程序:皆我百晓生
首先,关于++i和i+=1的问题,在Java中,这两个操作确实有不同的语义,但是在底层实现上,它们可能在某些情况下被优化成相同的操作。在JDK 1.8的环境下,通过jclasslib等工具查看编译后的方法信息,可能会发现它们看起来都是以相同的方式实现,这是因为编译器或者JVM的优化。具体来说:
++i 是前置递增操作,意味着先增加变量的值,然后再进行其他操作。在字节码层面,这个操作通常使用 iinc 指令来实现。i+=1 是后置递增操作,意味着先使用变量的当前值进行其他操作,然后再增加变量的值。在字节码层面,这个操作同样可以使用 iinc 指令来实现,但不是必须的。编译器可能会将其转化为其他形式。至于图1的内容,看起来像是你在使用jclasslib工具查看Java字节码时的界面截图。这个截图包含了很多信息,比如方法、异常表、局部变量表等。但是,这个截图并不直接展示++i和i+=1的具体实现细节。要理解这两个操作在字节码层面是如何实现的,你需要查看具体的字节码指令。
至于你提供的代码片段,它包含了Java代码和一些看起来像是截图编号的信息。我建议你将问题聚焦于具体的代码段,并描述你在运行这段代码时遇到的问题或你想要达到的目的。这样我可以更好地帮助你解决问题。
如果你需要关于这段代码的详细解释或者有其他编程问题,请提供更多的上下文或具体的问题描述。我会尽力帮助你解决。