什么时候和哪里是String初始化/存储在Java源代码中?

前端之家收集整理的这篇文章主要介绍了什么时候和哪里是String初始化/存储在Java源代码中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我有的源代码 @H_301_2@public class Koray { public static void main(String [] args) { System.out.println("This is a sample program."); } }

当我编译这个,我得到字节码.当我用十六进制查看器查看字节码时,我看到了一部分:

@H_301_2@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

这可以读为

@H_301_2@This is a sample program.

如果字节被解释为字符.

当我做的

@H_301_2@javap -c Koray.class

做拆分这个类我看到:

@H_301_2@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调用.

猜你在找的Java相关文章