Java 语言规范中的相关章节在这里。它指出
此外,字符串字面量总是引用 String 类的同一个实例。这是因为字符串字面量 - 或者更一般地说,作为常量表达式值的字符串(第 15.28 节) - 是“内部的”,以便使用 String.intern 方法共享唯一实例。
所以,是的,String
文字"print this line here"
是被实习的。
我想知道这如何与字符串常量一起使用。因此,每次我在循环中调用此语句时,“在此处打印此行”是否被实习-在池中查找它是否存在...?
不完全是,字节码有点不同。您将看到String
将类的常量池中的对象的特定引用推入堆栈。
您可以在字节码中看到这一点
public static void main(java.lang.String[]) throws java.lang.Exception; Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String print this line here
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
该ldc
指令用于
将常量 #index 从常量池(String、int 或 float)推送到堆栈
该常量用于println()
方法调用。