以下代码段在运行时在字符串池中生成了多少个字符串对象:
public class Test {
public static void main(String[] args) {
String string = new String("abc");
System.out.println("abc" == "def");
}
}
第二行是否为def
生成一个字符串对象?或者由于编译器优化而忽略它?
答案 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”存储在常量池中。