首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解打印某物的ByteCode

理解打印某物的ByteCode
EN

Stack Overflow用户
提问于 2018-12-08 17:24:32
回答 1查看 971关注 0票数 0

请帮助这个字节码打印什么?

代码语言:javascript
复制
BIPUSH 10
BIPUSH 7
IXOR
ISTORE 1
IINC 1 19
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ILOAD 1
INVOKEVIRTUAL java/io/PrintStream.println (I)V
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-08 17:37:44

我强烈建议阅读JVM规范,它解释了一切。

看看你的具体例子

代码语言:javascript
复制
BIPUSH 10

这会将10推到堆栈上。

代码语言:javascript
复制
BIPUSH 7

这会将7推到堆栈上。堆栈现在是10 7

代码语言:javascript
复制
IXOR

这是前两个元素。堆栈现在为10^7 = 13。

代码语言:javascript
复制
ISTORE 1

这会将顶级元素存储在局部变量槽1中。堆栈现在为空,而局部变量为13。

代码语言:javascript
复制
IINC 1 19

这将本地1乘以19。局部变量现在无效。

代码语言:javascript
复制
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;

这会将System.out推到堆栈上。

代码语言:javascript
复制
ILOAD 1

这会将变量加载到堆栈中。

代码语言:javascript
复制
INVOKEVIRTUAL java/io/PrintStream.println (I)V

这个印出来了。最后的结果是打印32

此字节码可能是由Java代码生成的,如下所示

代码语言:javascript
复制
int x = 10 ^ 7;
x += 19;
System.out.println(x);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53685051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档