先写一个很简单的程序
- public class StringDemo5 {
- public static void main(String[] args) {
- String s = new String("gh");
- }
- }
复制代码
反编译后节选:
- public static void main(java.lang.String[]);
- Code:
- 0: new #2 // class java/lang/String
- 3: dup
- 4: ldc #3 // String gh
- 6: invokespecial #4 // Method java/lang/String."<init>":(Ljava/lang/String;)V
- 9: astore_1
- 10: return
- }
复制代码
我查到ldc是将int, float或String型常量值从常量池中推送至栈顶。也就是说,一个String被创建的时候,其字面量"gh"已经存在于常量池中。
intern()方法:若字符串的字面量不在常量池中,就在常量池中创建字面量并返回其引用。
我很疑惑,怎样的情况下,一个String的字面量不在常量池中?
|
|