这是我有的源代码
public class Koray {
public static void main(String [] args) {
System.out.println("This is a sample program.");
}
}
当我编译这个,我得到字节码.当我用十六进制查看器查看字节码时,我看到了一部分:
19 54 68 69 73 20 69 73 20 61 20 73 61 6D 70 6C 65 20 70 72 6F 67 72 61 6D 2E
这可以读为
This is a sample program.
如果字节被解释为字符.
当我做的
javap -c Koray.class
做拆分这个类我看到:
Compiled from "Koray.java"
public class Koray {
public Koray();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String This is a sample program.
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: bipush 10
10: istore_1
11: return
}
我的问题是,在反汇编的文本中看到这个String在哪里?我只是在评论中看到它.
解决方法
看到ldc
instruction?它从运行时常量池加载一个常量.这是你的字符串存储的位置.
要打印常量池,请将-verbose option添加到javap调用.
要打印常量池,请将-verbose option添加到javap调用.