繁体   English   中英

Java 字符串与 StringBuilder

[英]Java String vs StringBuilder

据我所知,Java 中的+ operator已过载,当我们使用+运算符时,它会自动选择 StringBuffer 或 StringBuilder 来连接具有更好性能的字符串。 唯一的例外是当我们在循环中使用+运算符时。 在这种情况下,Java 没有利用 StringBuffer 和 StringBuilder 的优势。 真的吗? 我将连接 40 个字符串(大约 4500 个字符)并且我会经常重复它,所以我想确定一下。

不,Java 总是 (几乎总是,请参见下面的注释)将串联转换为StringBuilder 但是,循环的问题在于,它将在每个演练中创建StringBuilder新实例。

因此,如果您执行String someString = i + "something"; 在从01000的循环中,它将为您创建1000次StringBuilder新实例。 那么这可能是性能问题。 因此,只需在循环之前声明StringBuilder ,然后在其中使用它即可。

  • 当StringBuilder 可变时 ,String是不可变的 ,这意味着创建String时永远无法更改它

  • String是线程安全的,而StringBuilder不是

  • 字符串存储在常量字符串池中,而StringBuilder存储在堆中

当你循环

oldString = oldString + somechars,

这意味着您要创建一个新的String并首先将oldString的值放入其中,然后附加一些字符,然后将oldString变量重定向到结果

Java中的字符串是什么?

Java 中的字符串是用于表示字符序列的对象。 它们可以使用字符串文字或使用 NEW 关键字创建。 字符串在 Java 中是不可变的,以 UTF-16 格式表示。 创建新的 String 时,它会在 JVM 字符串池中查找具有相同值的 String。 如果找到相同的值,则返回引用,否则它会创建一个 String 对象并将该对象放入 String 池中。

除此之外,String 使用 + 运算符连接两个字符串,并在内部使用 StringBuffer 来执行此操作。

java中的字符串生成器是什么?

字符串构建器用于创建可变字符串并且本质上是可增长的。它不是线程安全的,这就是它比字符串缓冲区快的原因。但是,当涉及到多线程尝试访问的多线程时,在这种情况下,应该去带字符串缓冲区。

它有两个主要方法,append 和 insert。每次插入时,Append 都会在末尾添加一个字符序列,在指定位置放置一组特定的字符。 当内部缓冲区溢出时,它会自动变大。

字符串和字符串生成器之间的差异

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM