了解打印某些内容的ByteCode

时间:2018-12-08 17:24:33

标签: java bytecode

请帮助该字节码打印什么

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

1 个答案:

答案 0 :(得分:3)

我强烈建议您阅读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);