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

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

上一篇 下一篇

给定以下 2 种实现,首选哪一种: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

分割线

网友回答:

关键是你是在一个地方编写单个串联,还是随着时间的推移累积它。

对于您给出的示例,显式使用 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();

分割线

网友回答:

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

更重要的是,鉴于我们只有 3 个
属性,它可能没有
区别,但是您在
什么时候从 concat 切换到构建器?

在循环中连接时 – 这通常是编译器无法自行替换的时候。StringBuilder

分割线

网友回答:

在大多数情况下,您不会看到这两种方法之间的实际差异,但很容易构建如下所示的最坏情况:

public class Main
{
    public static void main(String[] args)
    {
        long now = System.currentTimeMillis();
        slow();
        System.out.println("slow elapsed " + (System.currentTimeMillis() - now) + " ms");

        now = System.currentTimeMillis();
        fast();
        System.out.println("fast elapsed " + (System.currentTimeMillis() - now) + " ms");
    }

    private static void fast()
    {
        StringBuilder s = new StringBuilder();
        for(int i=0;i<100000;i++)
            s.append("*");      
    }

    private static void slow()
    {
        String s = "";
        for(int i=0;i<100000;i++)
            s+="*";
    }
}

输出为:

slow elapsed 11741 ms
fast elapsed 7 ms

问题在于,将 += 附加到字符串会重建一个新字符串,因此它的成本与字符串的长度(两者的总和)成线性关系。

所以 – 对于您的问题:

第二种方法会更快,但可读性较差且更难维护。
正如我所说,在您的特定情况下,您可能不会看到区别。

模板简介:该模板名称为【StringBuilder vs Java 中 toString() 中的字符串连接】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 299次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-02
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
自适应 微信文章 微信模板 微信素材 单页式简历模板 微信公众平台 响应式 微信图片 企业网站 html5
您可能会喜欢的其他模板