在Java中,在toString()方法中使用StringBuilder和String串联。

11 浏览
0 Comments

在Java中,在toString()方法中使用StringBuilder和String串联。

给定以下两个toString()实现,哪一个更好:

public String toString(){
    return "{a:"+ a + ", b:" + b + ", c: " + c +"}";
}

还是

public String toString(){
    StringBuilder sb = new StringBuilder(100);
    return sb.append("{a:").append(a)
          .append(", b:").append(b)
          .append(", c:").append(c)
          .append("}")
          .toString();
}

更重要的是,虽然我们只有3个属性,但到了哪个点,你会从+连接切换到StringBuilder

admin 更改状态以发布 2023年5月24日
0
0 Comments

关键在于您是否将单个串联全部放在一个地方或久而久之地累积。

对于您给出的示例,显式使用StringBuilder没有意义。(看一下您第一个示例的编译代码。)

但是,如果您正在构建一个字符串,例如在循环内部,请使用StringBuilder。

为了澄清,假设hugeArray包含数千个字符串,像这样的代码:

...
String result = "";
for (String s : hugeArray) {
    result = result + s;
}

与以下代码相比非常浪费时间和内存:

...
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
    sb.append(s);
}
String result = sb.toString();

0
0 Comments

Version 1更好,因为它更短,编译器实际上会将其转换为版本2 -没有任何性能差异。

更重要的是,因为我们只有3个属性,可能没有什么区别,但在什么时候切换从拼接到构建器更好呢?

在循环中拼接的点上 - 那通常是编译器无法自己替换StringBuilder的时候。

0