字符串常量池查询

时间:2014-05-13 07:57:40

标签: java string constants

public class D2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String s1="java";
        String s2="ja".concat("va");
        System.out.println(s1==s2);
    }
}

在s2中连接两个String常量时,不会产生新的String对象(仅在使用new时创建String对象,或者在连接时使用类似于s1的perm引用)。请详细说明为什么o / p是错误的。

1 个答案:

答案 0 :(得分:4)

  

连接s2中的2个字符串常量不会产生新的String对象

当使用字符串连接运算符执行时,这是真的 - 但这不是你在这里做的。您手动调用String.concat,因此 不是常量表达式,并且在编译时进行评估。

如果您使用:

String s2 = "ja" + "va";

然后串联将由编译器执行,s1s2将引用相同的对象。

JLS section 15.28提供有关导致常量表达式的详细信息,包含方法调用。