提问人:Siva kumar 提问时间:5/16/2015 最后编辑:Mikheil ZhghentiSiva kumar 更新时间:10/21/2020 访问量:1841
为什么两个字符串对象引用的串联不等于相同的内容字符串对象 [duplicate]
Why Concatenation of two string objects reference not equal to same content string object [duplicate]
问:
为什么下面的对象和对象不同,当尝试在字符串池中创建时,它会检查内容是否具有相同的内容,因此引用字符串池中的对象。但我的假设是错误的,那么任何人都会纠正我。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
答:
9赞
M A
5/16/2015
#1
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();
0赞
Minu Alex
5/16/2015
#2
Just try this
String s = "Buggy";
s = s.concat("Bread");
System.out.println(s);
评论
the string pool is only used for constant strings unless you call intern.
s3
s5