为什么两个字符串对象的连接引用不等于相同的内容字符串对象
为什么s3
和s5
String
对象不同,当s5
尝试在String池中创建时,它检查内容s3
已经有相同的内容,所以s5
引用字符串池中的s3
对象。 但我的假设是错误的,那么任何人都应该纠正我。
String s1="Buggy"; String s2="Bread"; String s3="BuggyBread"; String s4 = "Buggy"+"Bread"; String s5 = s1 + s2 System.out.println(s3==s4); // True System.out.println(s3==s5); //false
-
String s4 = "Buggy" + "Bread";
编译器很聪明,意识到这只是在
s3
引用的常量BuggyBread
。 换句话说,s4
引用与字符串池中的s3
相同的String
。 -
String s5 = s1 + s2;
在这里,编译器忠实地转换为基于
StringBuilder
的变量内容的串联,这产生了与s3
不同的引用。 换句话说,这类似于:StringBuilder sb = new StringBuilder(s1); sb.append(s2); String s5 = sb.toString();
Just try this String s = "Buggy"; s = s.concat("Bread"); System.out.println(s);