【发布时间】:2016-09-02 12:19:50
【问题描述】:
我有一个问题。
当我们这样做时
字符串 str = "abc";
"abc" 将成为字符串字面量并驻留在字符串池下。
如果我们在 for 循环中有字符串,如下所示:
private static void doByString() {
String str;
for(long l = 0; l < Long.MAX_VALUE; l++){
str = str + "" + l;
}
}
它会产生很多字符串文字,我们必须在 for 循环中使用它。
在这种情况下,我们可以做些什么来尽量减少字符串字面量的产生吗?
在这种情况下我们可以使用字符串生成器吗:
private static void boByStringBuilder() {
StringBuilder builder = new StringBuilder();
for(long l = 0; l < Long.MAX_VALUE; l++){
builder.append(l + "");
}
}
【问题讨论】:
-
是的,这是 StringBuilder 的目的之一。
-
长话短说,是的,只要连接有任何逻辑阻止编译器用
StringBuilder隐式替换String连接,就使用StringBuilder,例如在你的循环中。 -
这两个循环在功能上是不同的。第一个等价于
String str = "" + (Long.MAX_VALUE - 1);(这里没有附加——你也可以只做最后的执行)。