为什么以下s3
和s5
String
对象不同,当s5
尝试在字符串池中创建时,它会检查内容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
答案 0 :(得分:8)
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();
答案 1 :(得分:0)
Just try this
String s = "Buggy";
s = s.concat("Bread");
System.out.println(s);