String s8 = new String("girlfriend");
String s9 = new String("girl" + "friend");
答案: 3个
原因:
首先 : "girlfriend" 在常量池中不存在, 故创建一个字符串对象
其次 : new String("girlfriend") : 表示new 了一个字符串对象
然而 : "girl" + "friend" 由于是两个常量使用+号拼接, 在javac编译时, 会自动进行调优, 使得"girl" + "friend" == "girlfriend" , 而"girlfriend" 在常量池中已经存在, 故只需要引用赋值, 不需要创建新的
最后 : new String("girl" + "friend") : 表示new 了一个字符串对象
综上所述 : 共创建了3个字符串对象
相关笔记
public static void main(String[] args) {
String s1 = "helloworld";
String s2 = "helloworld";
System.out.println("s1 == s2 = " + (s1 == s2));
System.out.println(s1 == s2);
String s3 = "hello";
String s4 = s3 + "world";
System.out.println(s1 == s4);
String s5 = "hello" + "world";
System.out.println(s1 == s5);
System.out.println(s4 == s5);
final String s6 = "hello";
String s7 = s6 + "world";
System.out.println("s1 == s7 = " + (s1 == s7));
}