A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先写一个很简单的程序
  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的字面量不在常量池中?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马