当前位置: 首页 > 面试题库 >

如果编译器自动将字符串连接转换为StringBuilder,为什么要显式使用StringBuilder?

夏侯鹏
2023-03-14
问题内容

我想知道,由于编译器内部在执行String串联时使用StringBuilder追加字符串,那么有什么意义,如果String串联已经为您完成了工作,为什么还要使用StringBuilder呢?还有其他特定原因吗?


问题答案:

如前所述,您不应使用StringBuilder代替简单的字符串连接表达式,例如a + " = " + b。后者的键入速度更快,更易于阅读,并且编译器StringBuilder无论如何都会在内部使用它,因此重写它不会带来性能优势。

但是StringBuilder,如果要在循环中串联大量字符串,则很有用。以下代码效率低下。它需要O(n 2)时间来运行并创建许多临时字符串。

String result = "";
for (int i = 0; i < foo.length; ++i)
{
    result += bar(foo[i]);  // Bad
}

尝试以下方法:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < foo.length; ++i)
{
    sb.append(bar(foo[i]));
}
String result = sb.toString();

编译器仅优化简单a + b + c表达式。它不能自动优化上述代码。



 类似资料:
  • 问题内容: Oracle Java Community网站上的一篇文章提供了以下方法作为示例(对于JPA Converter,但这并不相关): 将String y强制转换为String val有什么用?有正当的理由吗? 原始文章:JPA的新增功能 问题答案: 这样的转换是完全没有必要的。我可以想象那是以前 但是后来参数类型更改为,而作者只是忘了删除强制类型转换。

  • 本文向大家介绍在Java中将StringBuilder转换为字符串,包括了在Java中将StringBuilder转换为字符串的使用技巧和注意事项,需要的朋友参考一下 StringBuilder类的toString()方法重新运行当前对象的String值。要将StringBuilder转换为String值,只需在其上调用toString()方法。 实例化StringBuilder类。 使用appe

  • 问题内容: MySQL是否会自动将字符串转换为数字值? 转换如何进行? ‘1234’= 1234吗? ‘1abc’= 1? ‘文本’= 1? 给定那是bigint类型的,该查询将如何解释? 问题答案: 前三个问题的答案是:是,是和否。 当字符串转换为数字时,它将成为value 。 描述类型转换的文档在这里。 对于您的查询: 该摘录摘自文档: 在所有其他情况下,将参数作为浮点数(实数)进行比较。 换

  • 我只是无法在c中转换不同的数据类型,我知道c是一种强类型语言,所以我在这里使用了,但我面临一个问题,错误消息是 从“std::string{aka std::basic_string}类型转换为“int”类型的static_

  • 我正在使用文档来解析命令行参数。这有效,并生成地图,例如 现在我想将和值连接成一个字符串,两个值之间有一个冒号。基本上,诸如: 不幸的是,这不起作用,因为我收到错误消息: 无效操作:参数[“”]“:”(接口{}和字符串类型不匹配) 所以很明显,我需要将从映射中得到的值(它只是<code>接口{}</code>,所以它可以是任何东西)转换为字符串。现在我的问题是,我该怎么做?

  • 问题内容: 我想将流结果输出转换为字符串,因为我想在Junit中使用它,我想我需要使用字符串编写器,但是我不确定如何确切地使用它。 谢谢费多 问题答案: 查看并学习使用StreamResult类的javadocs(http://java.sun.com/javase/6/docs/api/)。StreamResult的构造函数之一采用Writer对象作为参数。您将看到Writer的子类之一是Str