StringBuilder:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
(创建页面,内容为“String、StringBuffer、StringBuilder 底层用 char[],都是final类,不允许被继承,这样设计主要是从性能和安全性上考虑的。 * String 构建的字符串对象,其内容理论上是不能被改变的。但很多时候需要改变字符串的内容的,如常见的字符串拼接,一般使用 "+" 来拼接,实际上会创建一个新的字符串,造成执行效率低下 * StringBuffer 是一种可变的字符串类。每个 S…”)
 
无编辑摘要
第5行: 第5行:
* 在 Java 5 中提出 StringBuilder 类,与 StringBuffer 的用法几乎完全一样,虽然不是线程安全,但执行效率更快
* 在 Java 5 中提出 StringBuilder 类,与 StringBuffer 的用法几乎完全一样,虽然不是线程安全,但执行效率更快


==== 字符串拼接测试 ====
当拼接次数较多时,String 出现非线性增长,应该是直接触发了 GC 机制。
{| class="wikitable"
{| class="wikitable"
|+10 万次字符串拼接
|+10 万次字符串拼接
!对象
!对象
!时间(毫秒)
!时间(毫秒)
!线程安全
|-
|-
|String
|String
|29382
|1576
|是
|-
|-
|StringBuffer
|StringBuffer
|4
|4
|是
|-
|-
|StringBuilder
|StringBuilder
|2
|3
|
|}
{| class="wikitable"
|+100 万次字符串拼接
!对象
!时间(毫秒)
|-
|String
|92904
|-
|StringBuffer
|33
|-
|StringBuilder
|20
|}
|}
[[分类:Develop]]
[[分类:Develop]]
[[分类:Java]]
[[分类:Java]]

2024年3月19日 (二) 09:58的版本

String、StringBuffer、StringBuilder 底层用 char[],都是final类,不允许被继承,这样设计主要是从性能和安全性上考虑的。

  • String 构建的字符串对象,其内容理论上是不能被改变的。但很多时候需要改变字符串的内容的,如常见的字符串拼接,一般使用 "+" 来拼接,实际上会创建一个新的字符串,造成执行效率低下
  • StringBuffer 是一种可变的字符串类。每个 StringBuffer 的类对象都能够存储指定容量的字符串,如果字符串的长度超过了 StringBuffer 对象的容量空间,则该对象的容量会自动扩大
  • 在 Java 5 中提出 StringBuilder 类,与 StringBuffer 的用法几乎完全一样,虽然不是线程安全,但执行效率更快

字符串拼接测试

当拼接次数较多时,String 出现非线性增长,应该是直接触发了 GC 机制。

10 万次字符串拼接
对象 时间(毫秒)
String 1576
StringBuffer 4
StringBuilder 3
100 万次字符串拼接
对象 时间(毫秒)
String 92904
StringBuffer 33
StringBuilder 20