【Java基础】String、StringBuffer和StringBuilder三种字符串对比

简介: 【Java基础】String、StringBuffer和StringBuilder三种字符串对比

java.lang.String:一般作为简单字符串类型

java.lang.StringBuffer:字符串缓冲区

java.lang.StringBuilder:字符串缓存区

1. 适用场景

运行速度StringBuilder > StringBuffer > String

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

2. 线程安全

StringBuffer是线程安全的,StringBuilder、String是线程不安全的

2.1 StringBuilder为什么线程不安全

StringBuilder和StringBuffer的底层都是由char数组来实现的,那么为什么StringBuffer是线程安全的,StringBuilder就不是呢?

先来执行一个demo

执行结果:

分析:数组越界并且对象的长度不是10000,先来看源码

添加元素的append方法,super方法调用了父类AbstractStringBuilder的append方法

@Override
    public StringBuilder append(String str) {
        super.append(str);// 调用父类的append方法添加元素
        return this;
    }

点进去看父类AbstractStringBuilder的append方法

第450行count+=len不是原子操作,假如此时A、B线程都执行到450行,count值为10,len值为1,A、B得到的count都是10,A、B线程执行结束后count=11,不是12,count值在多次执行时当A、B线程同时执行到这里就会出现值覆盖,这也就是为什么最后的执行结果比10000小的原因

StringBuffer为什么线程安全

打开StringBuffer的源码中的append方法,可以看出加了synchronized锁

目录
相关文章
|
18天前
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
|
18天前
|
Java 安全 测试技术
滚雪球学Java(49):如何使用StringBuilder类在Java中高效地处理字符串?
【6月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
17 3
滚雪球学Java(49):如何使用StringBuilder类在Java中高效地处理字符串?
|
14天前
|
安全 Java API
JavaSE——常用API进阶一(3/3)-StringBuilder(构造器、拼接内容、反转操作、其他操作),StringBuffer,StringJoiner
JavaSE——常用API进阶一(3/3)-StringBuilder(构造器、拼接内容、反转操作、其他操作),StringBuffer,StringJoiner
15 1
|
17天前
|
安全 Java 测试技术
滚雪球学Java(50):理解Java中String、StringBuilder和StringBuffer的区别与选择
【6月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
12 0
滚雪球学Java(50):理解Java中String、StringBuilder和StringBuffer的区别与选择
|
17天前
|
存储 安全 IDE
27. 【Java教程】StringBuilder
27. 【Java教程】StringBuilder
26 1
|
29天前
|
存储 安全 Java
【JAVA学习之路 | 提高篇】StringBuffer与StringBuilder
【JAVA学习之路 | 提高篇】StringBuffer与StringBuilder
|
20天前
|
安全 Java
Java中的StringBuffer:深入解析与最佳实践
Java中的StringBuffer:深入解析与最佳实践
|
1月前
|
存储 安全 Java
Java中的这些String特性可能需要了解下
Java中的String特性你知道哪些?虽然String很常见,通过源码可以看到String的值传递、字符串表和不可变性。本文基于JDK17说明。
34 1
|
20天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
20 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
1月前
|
存储 Java
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究