字符串池中的对象数

时间:2015-03-03 19:00:14

标签: java string jvm

以下代码段在运行时在字符串池中生成了多少个字符串对象:

public class Test {
    public static void main(String[] args) {
       String string = new String("abc");      
       System.out.println("abc" == "def");  
   }
}

第二行是否为def生成一个字符串对象?或者由于编译器优化而忽略它?

1 个答案:

答案 0 :(得分:0)

字节码如下:

  public static void main(java.lang.String[] args) {
    /* L7 */
    0 new 2;
    3 dup;
    4 ldc 3;                  /* "abc" */
    6 invokespecial 4;        /* java.lang.String(java.lang.String autumn) */
    9 astore_1;               /* autumn */
    /* L8 */
    10 getstatic 5;           /* java.lang.System.out */
    13 iconst_0;
    14 invokevirtual 6;       /* void println(boolean arg0) */
    /* L10 */
    17 return;
}

所以,我想说只生成了一个String。 “def”存储在常量池中。