StringBuilder vs Java中toString()的字符串连接

StringBuilder vs Java中toString()的字符串连接

鉴于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个属性,它可能没有什么区别,但你会在什么时候从+concat 切换到StringBuilder


翻过高山走不出你
浏览 1353回答 4
4回答

互换的青春

关键是你是在一个地方写一个连接还是随着时间累积它。对于您给出的示例,明确使用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();

慕田峪4524236

我更喜欢:String.format( "{a: %s, b: %s, c: %s}", a, b, c );...因为它简短易读。除非你在具有非常高重复次数的循环中使用它并测量了性能差异,否则我不会对速度进行优化。我同意,如果你必须输出很多参数,这个表格会让人感到困惑(就像其中一条评论所说)。在这种情况下,我将切换到一个更易读的形式(可能使用apache-commons的ToStringBuilder - 取自matt b的答案)并再次忽略性能。
打开App,查看更多内容
随时随地看视频慕课网APP