#invokevirtual之后做什么

use*_*068 3 java-bytecode-asm invokevirtual

例如,如果将int变量a和b存储在局部变量1和2中,则此代码将进行计算this.f(3+b*a)。(此指针存储在变量0中)

iload_1
aload_0
icons_3
iload_1
iload_1
imul
iadd
invokevirtual #4
Run Code Online (Sandbox Code Playgroud)

#4站在这里代表什么?

Bri*_*etz 5

这是指向类文件的常量池的索引;它说的操作数invokevirtual存储在常量池的索引#4(将为a)中Constant_MethodRef_info。如果javap使用该-v标志进行调用,它将转储常量池,并在索引#4处看到什么类和方法它正在调用。

  • 即使不使用`-v`,`javap`也会在指令后写特定的类和方法,除了常量池索引之外。 (2认同)