了解打印内容的字节码
Understand ByteCode which print something
请帮助这个字节码将打印什么
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
我强烈建议阅读 JVM 规范,它解释了一切。
查看您的具体示例
BIPUSH 10
这会将 10 压入堆栈
BIPUSH 7
这会将 7 压入堆栈。堆栈现在是 10 7
IXOR
这对前两个元素进行了异或运算。堆栈现在是 10^7 = 13
ISTORE 1
这将顶部元素存储在局部变量槽 1 中。堆栈现在为空,而局部变量为 [INVALID, 13]
IINC 1 19
这会将局部变量 1 增加 19。局部变量现在是 [INVALID, 32]
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
这会将 System.out 压入堆栈
ILOAD 1
这会将变量加载到堆栈上
INVOKEVIRTUAL java/io/PrintStream.println (I)V
然后打印出来。所以最后的结果是打印 32
.
此字节码可能是由 Java 代码按照以下行
生成的
int x = 10 ^ 7;
x += 19;
System.out.println(x);
请帮助这个字节码将打印什么
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
我强烈建议阅读 JVM 规范,它解释了一切。
查看您的具体示例
BIPUSH 10
这会将 10 压入堆栈
BIPUSH 7
这会将 7 压入堆栈。堆栈现在是 10 7
IXOR
这对前两个元素进行了异或运算。堆栈现在是 10^7 = 13
ISTORE 1
这将顶部元素存储在局部变量槽 1 中。堆栈现在为空,而局部变量为 [INVALID, 13]
IINC 1 19
这会将局部变量 1 增加 19。局部变量现在是 [INVALID, 32]
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
这会将 System.out 压入堆栈
ILOAD 1
这会将变量加载到堆栈上
INVOKEVIRTUAL java/io/PrintStream.println (I)V
然后打印出来。所以最后的结果是打印 32
.
此字节码可能是由 Java 代码按照以下行
生成的int x = 10 ^ 7;
x += 19;
System.out.println(x);