[英]Java String vs StringBuilder
据我所知,Java 中的+ operator
已过载,当我们使用+
运算符时,它会自动选择 StringBuffer 或 StringBuilder 来连接具有更好性能的字符串。 唯一的例外是当我们在循环中使用+
运算符时。 在这种情况下,Java 没有利用 StringBuffer 和 StringBuilder 的优势。 真的吗? 我将连接 40 个字符串(大约 4500 个字符)并且我会经常重复它,所以我想确定一下。
不,Java 总是 (几乎总是,请参见下面的注释)将串联转换为StringBuilder
。 但是,循环的问题在于,它将在每个演练中创建StringBuilder
新实例。
因此,如果您执行String someString = i + "something";
在从0
到1000
的循环中,它将为您创建1000次StringBuilder
新实例。 那么这可能是性能问题。 因此,只需在循环之前声明StringBuilder
,然后在其中使用它即可。
当StringBuilder 可变时 ,String是不可变的 ,这意味着创建String时永远无法更改它
String是线程安全的,而StringBuilder不是
字符串存储在常量字符串池中,而StringBuilder存储在堆中
当你循环
oldString = oldString + somechars,
这意味着您要创建一个新的String并首先将oldString的值放入其中,然后附加一些字符,然后将oldString变量重定向到结果
Java 中的字符串是用于表示字符序列的对象。 它们可以使用字符串文字或使用 NEW 关键字创建。 字符串在 Java 中是不可变的,以 UTF-16 格式表示。 创建新的 String 时,它会在 JVM 字符串池中查找具有相同值的 String。 如果找到相同的值,则返回引用,否则它会创建一个 String 对象并将该对象放入 String 池中。
除此之外,String 使用 + 运算符连接两个字符串,并在内部使用 StringBuffer 来执行此操作。
字符串构建器用于创建可变字符串并且本质上是可增长的。它不是线程安全的,这就是它比字符串缓冲区快的原因。但是,当涉及到多线程尝试访问的多线程时,在这种情况下,应该去带字符串缓冲区。
它有两个主要方法,append 和 insert。每次插入时,Append 都会在末尾添加一个字符序列,在指定位置放置一组特定的字符。 当内部缓冲区溢出时,它会自动变大。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.