Что делает # после invokevirtual
Например, если int-переменные a и b хранятся в локальных переменных 1 и 2, этот код будет вычислять this.f(3+b*a)
, (this-указатель хранится в переменной 0)
iload_1
aload_0
icons_3
iload_1
iload_1
imul
iadd
invokevirtual #4
для чего #4
Стой здесь?
1 ответ
Решение
Это индекс в константном пуле файла классов; это говорит о том, что операнд invokevirtual
хранится в индексе № 4 постоянного пула (который будет Constant_MethodRef_info
.) Если вы вызываете javap
с -v
флаг, он будет выгружать пул констант, и вы увидите в индексе #4, какой класс и метод он вызывает.