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

何时在Java中使用StringBuilder

陶健
2023-03-14
问题内容

StringBuilder在Java中,通常最好使用a 进行字符串连接。总是这样吗?

我的意思是:创建StringBuilder对象,调用append()方法并最终toString()已经很小,然后将现有字符串与+运算符连接成两个字符串的开销是小的,还是建议仅用于两个以上的字符串?

如果有这样的阈值,它取决于什么(也许是字符串长度,但以哪种方式)?

最后,你是否会以+级联的可读性和简洁性为代价,StringBuilder以较小的情况(例如两个,三个或四个字符串)的性能为代价?

StringBuilder在过时的Java优化技巧以及Java都市神话中,都提到过对常规连接进行显式使用是过时的。


问题答案:

如果你在循环中使用String串联,则类似这样,

String s = "";
for (int i = 0; i < 100; i++) {
    s += ", " + i;
}

那么你应该使用StringBuilder(而不是StringBuffer)而不是String,因为它速度更快并且消耗的内存更少。

如果你只有一条语句,


String s = "1, " + "2, " + "3, " + "4, " ...;

那么你可以使用Strings,因为编译器会StringBuilder自动使用。



 类似资料:
  • 问题内容: 在上面的示例中,我有几个问题。 何时使用冲洗方法,为什么要使用它? 封闭方法在这里得分如何? …如果我错了,请纠正我,我正在读取文件对象并将其存储到另一个对象中,并对该文件对象进行类型转换。 序列化或将数据持久保存在Java中有哪些选择。我不希望数据以字节流的形式进入文件。 问题答案: 何时使用冲洗方法,为什么要使用它? 它将冲洗仍由缓冲的所有内容。JavaDoc中提供了详细描述。 封

  • 我有一个Employee类,它有如下3个字段。 为此,我希望根据员工姓名(empName)排序,如果多个员工的姓名相同,则根据员工id(empId)排序。 为此,我编写了一个自定义比较器,使用java.util.比较器如下所示。 我已经创建了8个Employee对象并添加到ArrayList中,如下所示。 并使用上述比较器对列表进行如下排序。 它工作得非常好。但这可以使用类似的方法来完成,如下所示

  • 问题内容: 我希望这将是足够的信息,所以就在这里。如果您需要更多信息,请在评论中了解。 我有一班有两个内部班。内部类每个都有两个方法来调用外部类中的方法。因此,它看起来像这样: 重要的是要注意: 这是针对Android应用的。的实例,并传递给作为网页视图一个JavaScript接口,所以并可以随时调用,没有特定的顺序。 目前,我在使用现有代码(不使用synced关键字)时遇到了一个问题,该问题在同

  • 问题内容: 在什么情况下,枚举比保证唯一元素的Collection(例如,java.util.Set的实现者)更合适? (这是我上一个问题的跟进) 问题答案: 基本上是在编译时就知道的一组定义明确的固定值。 您可以很容易地将枚举用作集合(通过EnumSet),它允许您定义行为,按名称引用元素,打开元素等。

  • 我碰到一堆代码 但是如果我使用普通的ArrayList它会给我输入图像描述时的错误herstrong texte善意的帮助

  • 问题内容: 我知道这将是一种不好的做法,尽管我知道我无法解释原因。 我认为您只应该对 不应该发生的 事情使用异常。我之所以问这个问题,是因为我有时会错误地使用异常。如果您的程序运行的 是标准情况, 是否应该引发异常? 问题答案: 您是对的:例外是指 特殊 情况。使用它们来控制正常的控制流不仅会掩盖代码的意图(这足以使它失去资格),而且速度也要慢得多,因为抛出和捕获异常的代价很高。 标准习惯用法(在