String、StringBuffer、StringBuilder的区别

一、本质区别

1.String 修改的内容不可改变

1.1 String 类不可继承

// final 修饰的类不可继承
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence



1.2 String 修饰的内容不可变

/** The value is used for character storage. */
private final char value[];



2.StringBuffer / StringBuilder 修饰的内容可变更


// 类不可继承
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence

// 类不可继承
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence



// 两者具有相同的抽象父类
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
// 内容可变
char value[];
}



二、运行速度

解释:
StringBuilder StringBuffer 减少开辟堆空间的时间,只需new一次,而StringBuffer 线程安全,synchronized 的同时需要消耗时间。
String 常量池的因素,所以在拼接短的字符串,拼接final常量,速度要高于StringBuilder

1.大量字符操作

StringBuilder > StringBuffer > String

使用场景:
[list]
[*]在循环中拼接字符串,使用StringBuilder,只需new一次;而String 每执行一次循环,new一次
[*]
[/list]

2.少量字符操作

String > StringBuilder > StringBuffer

使用场景:
[list]
[*]拼接常量
[/list]

三、线程安全

StringBuffer 线程安全
String 内容不可变,线程安全
StringBuilder 线程不安全

继承同一个父类,在实现上,前者使用了 synchronized 修饰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值