public static void main(String[] args) { String str1 = "1"; String str2 = "2"; String str3 = new String("1"); final String str4 = "2"; final String str5 = new String("2"); String str6 = "12";
String str7 = "1" + "2"; String str8 = str1 + "2"; String str9 = str1 + str2; String str10 = str3 + str4; String str11 = "1" + str4; String str12 = "1" + str5; String str13 = (str1 + str2).intern();
System.out.println("(1)"+ (str1 == str3)); System.out.println("(2)"+ (str2 == str4)); System.out.println("(3)"+ (str4 == str5)); System.out.println("(4)"+ (str6 == str7)); System.out.println("(5)"+ (str6 == str8)); System.out.println("(6)"+ (str6 == str9)); System.out.println("(7)"+ (str6 == str10)); System.out.println("(8)"+ (str6 == str11)); System.out.println("(9)"+ (str6 == str12)); System.out.println("(10)"+ (str6 == str13)); } |
答案:一个0.5分 (1)false (2)true (3)false (4)true (5)false (6)false (7)false (8)true (9)false (10)true |
由上题可以看出,("12"==str1+"2")的结果是false
此时我们可以通过debug当前行查看底层调用
public String toString() { // Create a copy, don't share the array return new String(value, 0, count); }
只要有对象参与运算,都会调用StringBuilder的toString方法在堆内new一个新对象返回
所以进行==地址比较结果是false