Java 从源码角度理解String StringBuffer StringBuilder 的区别


不可变对象

对象被完全创建之后,对象的内部状态不能被改变;基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象状态也吧能改

1、String,StringBuilder,StringBuffer 内部都是用char[]数组来实现;

从实际应用可能的场景中分析String,StringBuilder,StringBuffer产生的背景

实际应用我们对字符串的操作做出如下几种操作:插入,删除,修改,拼接,截取,查找,替换;

String 源代码char[]是final,所以对字符串的操作;中间会新建临时变量,对字符串的操作不会影响原来的字符串;操作完成返回的是一个新字符串对象

2、StringBuffer和StringBuidler 封装的是可变数组,可变字符序列;对字符串的操作不会产生新的对象;他们都是继承AbstractStringBuilder,他们对数组的操作方法实现是一样的,只是StringBuffer的方法上

加了synchronized关建字;内部对char数组的操作都是通过System.arraycopy完成

3、StringBuffer 因为方法上加了synchronized关键字,所以对象是线程安全的,所以效率低;多线程环境下使用

4、String 是不可变对象,所以也是线程安全的,字符少量情况下使用

5、StringBuidler 不是线程安全的,在非多线程环境下使用,效率高

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容