Entendiendo la salida de javap para Constant Pool

Cuando ejecuto javap en una aplicación HelloWorld muy simple, tengo cierta confusión sobre la salida alrededor del grupo constante.

Código de prueba

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

Javap -c -verbose salida (cortada)

// 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
}

Ok, entonces en la línea 3 vemos un empuje de la constante "hola mundo" en la pila a través del # 22, pero const # 23 parece mantener el valor real. Creo que estoy un poco confundido con lo que significa el # (número) cuando aparece en el lado derecho de la impresión.

Oracle / la página de manual de Sun para javap deja mucho que desear

Respuestas a la pregunta(3)

Su respuesta a la pregunta