Java 为什么两个字符串对象的串联引用不等于同一个内容字符串对象
为什么下面的Java 为什么两个字符串对象的串联引用不等于同一个内容字符串对象,java,string,Java,String,为什么下面的s3和s5String对象不同,当s5尝试在字符串池中创建时,它检查内容s3已经有相同的内容,所以s5引用字符串池中的s3对象。但我的假设是错误的,那么任何人都会纠正我 String s1 = "Buggy"; String s2 = "Bread"; String s3 = "BuggyBread"; String s4 = "Buggy" + "Bread&qu
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
String s4=“童车”+“面包”代码>
编译器足够聪明,可以意识到这只是常量BuggyBread
,它已在s3
中引用。换句话说,s4
引用与字符串池中的s3
相同的String
字符串s5=s1+s2代码>
在这里,编译器忠实地转换为基于StringBuilder
的变量内容串联,这会产生与s3
不同的引用。换句话说,这类似于:
StringBuilder sb = new StringBuilder(s1);
sb.append(s2);
String s5 = sb.toString();
s5不在字符串池中。请阅读@Jon Skeet answer<代码>字符串池仅用于常量字符串,除非您调用intern。因此
s3
在池中,s5
在heapThanQ manouti。。!谢谢你的解释
Just try this
String s = "Buggy";
s = s.concat("Bread");
System.out.println(s);