欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

String,StringBuffer,StringBuilder之间的关系

程序员文章站 2022-03-10 22:00:50
今天我们说说 String-----StringBuffer----- StringBuilder之间的关系首先熟悉一下三个类:String: 适用于字符串少量修改StringBuffer: 多线程频繁修改字符串StringBuilder:单线程频繁修改字符串String,StringBuffer,StringBuilder的异同共同点:1 都属于java.lang包2 可以互相转换,大都用于字符串的修改不同点:1.String: 源码中以长度为"传入字符串长度"的char类型数组进行...

今天我们说说 String-----StringBuffer----- StringBuilder之间的关系

首先熟悉一下三个类:
String: 适用于字符串少量修改
StringBuffer: 多线程频繁修改字符串
StringBuilder:单线程频繁修改字符串

String,StringBuffer,StringBuilder的异同

共同点:
1 都属于java.lang包
2 可以互相转换,大都用于字符串的修改

不同点:
1.String: 源码中以长度为"传入字符串长度"的char类型数组进行保存,jdk1.9 起以byte类型数组保存参数(传入英文时byte类型比char类型要节省1字节的空间) //看源码

StringBuilder,StringBuffer: 源码长度为"传入字符串长度"+16 固定长度的char类型数组进行保存。//看源码


2.String类是不可变的 (传入的字符串用带有final关键字修饰char类型数组保存,无法被修改) //看源码

StringBuilder,StringBuffer:具有可变性,传入的字符串无final关键字修饰,可修改。(源码用System.arraycopy()方法对char数组
长度不足的情况下可以进行扩容) //看源码


3 当频繁处理字符串时,StringBuffer,StringBuilder比String更能
提高性能,节约空间

注:上述的异同点要是不懂的可以瞅一下源码哟~~


StringBuffer和StringBuilder的不同点

1.线程安全:
StringBuffer类 (jdk1.0版本):适用于多线程,方法利用synchronized同步锁牺牲性能换安全

StringBuilder类(jdk1.5版本):适用于单线程,没有给方法施加synchronized同步锁,牺牲了安全换性能

2.性能:
StringBuffer:线程安全,性能较差,开销大

StringBuilder:线程不安全,性能较好,开销小

相同条件下,使用StringBuilder,比使用StringBuffer能获得10%~15%左右的性能提升

补充一点:
String类型若是在字符常量池进行拼接操作,切记不能利用变量拼接,由于变量的创建在堆中开辟,导致比较的内存地址会出错

String str1="AABB";
String str2="AA";
String result="AA"+"BB";
String result1=str2+"BB";  //str2为变量
System.out.println(result==result1);

结果为:
String,StringBuffer,StringBuilder之间的关系

总结:
1.String类型具有不可变,StringBuffer和StringBuilder 有可变性
2.String处理少量字符串,StringBuffer和StringBuilder 频繁处理字符串

3.StringBuffer:牺牲性能换安全;StringBuilder:牺牲安全换性能
4.StringBuffer:多线程 ;StringBuilder:单线程

本文地址:https://blog.csdn.net/python_777/article/details/112795116

相关标签: 学习笔记 java