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是错误的。
答案 0 :(得分:4)
连接s2中的2个字符串常量不会产生新的String对象
当使用字符串连接运算符执行时,这是真的 - 但这不是你在这里做的。您手动调用String.concat
,因此 不是常量表达式,并且不在编译时进行评估。
如果您使用:
String s2 = "ja" + "va";
然后串联将由编译器执行,s1
和s2
将引用相同的对象。
JLS section 15.28提供有关导致常量表达式的详细信息,不包含方法调用。