【发布时间】:2020-01-18 15:05:12
【问题描述】:
我的代码:
class TestStringConcatenation{
public static void main(String args[]){
String s1="Sachin ";
String s2="Tendulkar";
String s3=s1.concat(s2);
String s4=s1.concat(s2);
System.out.println(s4==s3);
}
}
输出:
false
concat 函数是否没有将 String 对象保存在字符串常量池中?
【问题讨论】:
-
因为它们是不同的对象,即使它们代表相同的文本。 “concat 函数是否没有将字符串对象保存在字符串常量池中?”那是对的。为什么会呢?字符串池的重点是缓存可重用的字符串,就像在
for (..){ print("foo");}的情况下,我们可以重用“foo”而不是在每次迭代中重新创建它。但是现在假设我们有for(int i=0; i<SIZE; i++){print("foo".concat(Integer.toString(i));},每次迭代都会创建自己的“foo1”“foo2”,缓存它们有意义吗? -
"concat 函数是否没有将 String 对象保存在字符串常量池中?" - 显然不是。
-
T.J.克劳德的答案是正确的,因为它解决了您的直接问题
-
另请注意,依赖引用相等会巧妙地使您的代码依赖于供应商,因为实习内容和时间的规则并不是一成不变的。