黑马程序员技术交流社区

标题: 又一个常量池问题:关于String.intern() [打印本页]

作者: Synaric    时间: 2015-10-4 10:15
标题: 又一个常量池问题:关于String.intern()
先写一个很简单的程序
  1. public class StringDemo5 {
  2.         public static void main(String[] args) {
  3.                 String s = new String("gh");
  4.         }
  5. }
复制代码

反编译后节选:

  1.   public static void main(java.lang.String[]);
  2.     Code:
  3.        0: new           #2                  // class java/lang/String
  4.        3: dup
  5.        4: ldc           #3                  // String gh
  6.        6: invokespecial #4                  // Method java/lang/String."<init>":(Ljava/lang/String;)V
  7.        9: astore_1
  8.       10: return
  9. }
复制代码

我查到ldc是将int, float或String型常量值从常量池中推送至栈顶。也就是说,一个String被创建的时候,其字面量"gh"已经存在于常量池中。
intern()方法:若字符串的字面量不在常量池中,就在常量池中创建字面量并返回其引用。
我很疑惑,怎样的情况下,一个String的字面量不在常量池中?





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2