【发布时间】:2017-02-14 19:43:29
【问题描述】:
据我了解,Java 中的字符串连接“+”运算符是使用 Stringbuilder 实现的,例如:
String s = "foo" + "bar"
内部编译为:
String s = new StringBuilder().append("foo").append("bar").toString();
所以我尝试了这样的事情:
String foo1 = "foobar";
String foo2 = new String("foobar");
String foo3 = "foo" + "bar";
char[] fooarray = {'f','o','o','b','a','r'};
String foo4 = new String(fooarray);
接下来,我使用 == 运算符对它们进行了测试。结果大多符合我的预期:foo2 和 foo4 没有为任何其他字符串返回“==”。
但是,foo3 == foo1 返回 true。这是什么原因? StringBuilder 类的 toString 方法内部调用 "new String" ,所以 foo3 不应该是一个唯一的对象,就像 foo2 一样?
【问题讨论】:
-
两个字符串literals的字符串连接由编译器完成,而不是在运行时。所以写
"foo" + "bar"和写"foobar"是一样的。它允许您将字符串文字拆分为多行,而不会影响性能。 -
另外,如果你的字符串是
final,那么如果s1和s2是对字符串文字的引用,那么String s = s1 + s2将在编译时发生
标签: java string stringbuilder string-concatenation