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 不是线程安全的,在非多线程环境下使用,效率高

你可能感兴趣的:(Java 从源码角度理解String StringBuffer StringBuilder 的区别)