String、StringBuilder、StringBuffer

本文详细解析了String、StringBuilder和StringBuffer三种字符串类型的特点。包括它们的可变性、多线程安全性及性能对比,并介绍了这些类型在Java中的初始化方式及其底层实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String、StringBuilder、StringBuffer

共同点:底层都是使用一个char类型的数组保存元素(叫value)

1.可变与不可变

string 对象是不可变的; StringBuilder 与 StringBuffer 对象是可变的。
因此在每次对 String 类型进行改变的时候, 都会生成一个新的 String 对象, 然后将指针指向新的 String 对象, 所以经常改变内容的字符串最好不要用 String , 因为每次生成对象都会对系统性能产生影响, 特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作, 性能就会降低。

2.是否多线程安全

StringBuffer是线程安全的,因为它的许多方法如append都是使用synchronized修饰的。String是final类型的,所以也是安全的。StringBuilder是线程不安全的
速度StringBuilder>StringBuffer>String

3.初始化方式的不同

StringBuffer 和 StringBuilder 只能用构造函数的形式来初始化。String 除了用构造函数进行初始化外, 还可以直接赋值。

StringBuilder和StringBuffer的父类都是AbstractStringBuilder,两者的append方法都是使用父类的append方法,append方法中有扩容,所以两者的扩容机制也一样。append也是使用system.arraycopy(native方法)复制数组。但是不是用synchronized 修饰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值