栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String、StringBuffer、StringBuilder的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String、StringBuffer、StringBuilder的区别

Just Do It
三者相同点
String、StringBuffer、StringBuilder都是java中关于字符串处理的类。
三者都是被final修饰,不可被继承
底层实现都是 char value[]
**

区别一:对字符串的操作是否在原对象上**

String类型字符串的每次操作都会产生新的对象

//对字符串的追加、删除某个字符,其实都是对字符数组操作
private final char value[];

String类的char类型的数组value被final修饰

final(最终的)修饰变量:表示变量一旦被赋值就不可用更改它的值

因此,每次对String类型字符串的操作都会产生新的对象!(final char value[],一旦往数组value里增加字符,那么将是一个新的String对象)
StringBuffer和StringBuilder都是在原对象上操作
底层实现

//StringBuffer和StringBuilder都继承AbstractStringBuilder类
//
char[] value;
//StringBuilder和StringBuffer默认容量是16
public StringBuilder() {
        super(16);
}
public StringBuffer() {
        super(16);
}  
    

value数组没有被final修饰,因此是可变的,故对字符串的修改都是在原对象上进行。

StringBuffer、StringBuilder的区别

相同点

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
    
public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
  1. StringBuffer和StringBuilder都继承AbstractStringBuilder类,故基本操作都差不多。
  2. 对字符串的修改都是在原对象上进行。

不同点:
StringBuffer是线程安全的,StringBuilder线程不安全

//StringBuffer的方法都被synchronized修饰
public synchronized StringBuffer append(char[] str) {
        toStringCache = null;
        super.append(str);
        return this;
    }
....
public StringBuilder append(char[] str) {
        super.append(str);
        return this;
    }

我截取了StringBuffer和StringBuilder类的部分方法,可以从源码看出StringBuffer的方法都都加上了synchronized锁,因此StringBuffer是线程安全的。

三者性能比较:

StringBuilder > StringBuffer > String

应用场景

需要频繁改变字符串内容时,使用StringBuilder和StringBuffer。
优先使用StringBuilder,它的性能更好一些。
如果涉及到多线程使用共享变量,则使用StringBuffer。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号