Java中String、StringBuffer、StringBuilder的区别与共同点?

Java中String、StringBuffer、StringBuilder的区别与共同点?

Java 平台提供了两种类型的字符串: String 和 StringBuffer/StringBuilder,它们都可以储存和操作字符串, 区别如下。

1. String 是只读字符串,也就意味着 String 引用的字符串内容是不能被改变的。 初学者可能会有这样的误解:
String str = “abc”;
str = “bcd”;

如上,字符串 str 明明是可以改变的呀!其实不然, str 仅仅是一个引用对象,它指向一个字符串对象“ abc”。第二行代码的含义是让str 重新指向了一个新的字符串“ bcd”对象,而“ abc”对象并没有任何改变,只不过该对象已经成为一个不可及对象罢了。

2. StringBuffer/StringBuilder 表示的字符串对象可以直接进行修改。
3. StringBuilder 是 Java5 中引入的,它和 StringBuffer 的方法完全相同,区别在于它是在单线程环境下使用的, 因为它的所有方法都没有被 synchronized 修饰,因此它的效率理论上也比 StringBuffer 要高。

可以从以下三个方面回答!

1. 可变不可变

String:字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象。

StringBuffer:在修改时会改变对象自身,每次操作都是对 StringBuffer 对象本身进行修改,不是生成新的对 象;使用场景:对字符串经常改变情况下,主要方法: append(), insert()等。

2. 线程是否安全

String:对象定义后不可变,线程安全。

StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区 大量数据。

StringBuilder:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。

3. 共同点
  • StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。
  • StringBuilder、 StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方法,如super.append(…)。 只是 StringBuffer 会在方法上加 synchronized关键字,进行同步。最后,如果程序不是多线程的,那么使用 StringBuilder 效率高于 StringBuffer。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值