это «недостающее руководство» для javap.

я запускаю javap в очень простом приложении HelloWorld, у меня возникает путаница в выводе вокруг постоянного пула.

Тестовый код

public class TestClass {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

Вывод Javap -c -verbose (в разрезе)

// Header + consts 1..22 snipped
const #22 = String      #23;    //  hello world
const #23 = Asciz       hello world;

public static void main(java.lang.String[]);
  Signature: ([Ljava/lang/String;)V
  Code:
   Stack=2, Locals=1, Args_size=1
   0:   getstatic       #16; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #22; //String hello world
   5:   invokevirtual   #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   8:   return
  // Debug info snipped
}

Итак, в строке 3 мы видим добавление константы «hello world» в стек через # 22, но const # 23, кажется, содержит фактическое значение. Я думаю, что я немного запутался с тем, что означает # (число), когда оно появляется в правой части распечатки.

Страница руководства Oracle / Sun для javap оставляет желать лучшего.

Ответы на вопрос(3)

Ваш ответ на вопрос