为什么下面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
Run Code Online (Sandbox Code Playgroud)
String s4 = "Buggy" + "Bread";
编译器足够智能,可以实现这只是BuggyBread已经引用的常量s3.换句话说,s4引用相同String的s3是在字符串池.
String s5 = s1 + s2;
在这里,编译器忠实地转换为StringBuilder基于变量内容的基于串联的连接,这产生了差异引用s3.换句话说,这类似于:
StringBuilder sb = new StringBuilder(s1);
sb.append(s2);
String s5 = sb.toString();
Run Code Online (Sandbox Code Playgroud)