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

前端之家收集整理的这篇文章主要介绍了什么时候和哪里是String初始化/存储在Java源代码中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我有的源代码
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调用.

猜你在找的Java相关文章