字符串与字符串生成器。哪个更快?如果是 stringbuilder 那么为什么要使用 string
String vs String builder. which is faster? If stringbuilder then why use string
我对字符串和更快的字符串生成器感到困惑,我知道字符串生成器在串联操作中比字符串更快。但是,如果我不想使用串联操作怎么办。如果 stringbuilder 更快,为什么我们主要使用 string。
String
的优点是不可变:一旦构造,字符串实例的内容就不能再改变。这意味着您通过引用传递字符串而无需一直进行复制。
例如,假设您将 StringBuilder
传递给 class。然后你可以在之后更改StringBuilder
的内容,并混淆class。因此 class 需要复制一份以确保内容不会在它不知情的情况下发生更改。对于 String
这不是必需的,因为 String
是不可变的。
现在,当您在构建字符串的过程中时,这种不变性实际上是一个问题,因为必须为每个连接创建一个新的 String
实例。这就是 StringBuilder
class 存在的原因:它是一个辅助 class ,旨在构建字符串(因此得名)。
在实践中,通常没有必要显式使用 StringBuilder
。 Java 编译器会在您编写 String result = "some constant" + a + b;
之类的内容时自动为您使用 StringBuilder
。只有复杂的构建逻辑(例如,使用 if
和 for
块)你需要自己做。
我对字符串和更快的字符串生成器感到困惑,我知道字符串生成器在串联操作中比字符串更快。但是,如果我不想使用串联操作怎么办。如果 stringbuilder 更快,为什么我们主要使用 string。
String
的优点是不可变:一旦构造,字符串实例的内容就不能再改变。这意味着您通过引用传递字符串而无需一直进行复制。
例如,假设您将 StringBuilder
传递给 class。然后你可以在之后更改StringBuilder
的内容,并混淆class。因此 class 需要复制一份以确保内容不会在它不知情的情况下发生更改。对于 String
这不是必需的,因为 String
是不可变的。
现在,当您在构建字符串的过程中时,这种不变性实际上是一个问题,因为必须为每个连接创建一个新的 String
实例。这就是 StringBuilder
class 存在的原因:它是一个辅助 class ,旨在构建字符串(因此得名)。
在实践中,通常没有必要显式使用 StringBuilder
。 Java 编译器会在您编写 String result = "some constant" + a + b;
之类的内容时自动为您使用 StringBuilder
。只有复杂的构建逻辑(例如,使用 if
和 for
块)你需要自己做。