JDK源码笔记05 StringBuffer、StringBuilder
2021/7/2 22:52:47
本文主要是介绍JDK源码笔记05 StringBuffer、StringBuilder,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
sth before start
接下来会看StringBuffer、StringBuilder、StringJoiner。其实我感觉这几个类的实现原理应该是不难的,字符串拼接无非就是字符数组的操作,然后调用String的构造函数返回嘛。不过我印象里这些类的效率还是有差别的,有点好奇具体有什么差别。
StringBuffer说明
- 线程安全,方法都是同步的(synchronized)
- 可变的字符数组段(sequence of characters)
- 他的操作虽然是线程安全的,但是如果传入的原数据(source sequence)是多个线程共享的,那么为了保证线程安全,执行方法的时候也需要获得锁来保证线程安全
- 自动扩容
- 除法特殊说明,传入空指针会抛出空指针异常
- StringBuilder更快,因为他不需要同步
- 实现了Comparable,但是没有重写equals,要是用StringBuffer作为SortedMap的key时要注意
属性
private transient String toStringCache; //缓存toString的返回值 //transient表示序列化的时候不会被序列化 //调用insert或其他会改变字符串的方法的时候会设置成空
方法
然后其实方法里都是调用了父类AbstractStringBuilder
的方法,append之类的方法其实都是在这个类里实现的。StringBuffer和StringBuilder只是一个包装类。
构造函数
- public StringBuffer() {super(16);}
创建容量为16的StringBuffer - public StringBuffer(int capacity)
- public StringBuffer(String str)
根据str的属性创建新的byte[],然后调用append进行初始化
append(str)
- 查看编码,看看需不需要从Latin1改成UTF16
- 看看容量够不够,不够就扩容
- 调用String的getBytes,将str的内容拷贝进现在的value里
其他方法也都是大同小异的字符串操作
比较函数
- 0 :相同
- 正数:调用方字典序前
- 负数:调用方字典序后
关于同步
其实就是在所有的方法头都用上了synchronized。。。。。。
我绷不住了
这篇关于JDK源码笔记05 StringBuffer、StringBuilder的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南