返回

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同

发布时间:2022-12-22 04:54:24 288

String

String str1 = "hello";
str1 = str1 + "world";
System.out.println(str1);

对此代码进行反汇编

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_多线程

 

可以看出来在其中调用了invokespecial 构造了一个StringBuilder对象,说明String字符串相加其实是通过StringBuilder的append方法进行的。其顺序为。

1.先将第一个字符串​​hello​​转化为StringBuilder

2.将第二个字符串​​world​​通过append方法追加进去。

3.调用StringBuilder的toString方法

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_反汇编_02

 

因为StringBuilder的toString方法new了一个新的String对象给目标,所以这可就可以解释,为什么追加前的​​str1​​​和追加后的​​str1​​地址不同了。

StringBuilder

StringBuilder str3 = new StringBuilder("hello");
str3.append("world");
System.out.println(str3);

对此代码进行反汇编

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_字符串_03

 

可以看出来其只是调用了一次append追加,说明在字符串追加上面,StringBuilder有着天然优势,其没有生成新的对象。

StringBuffer

StringBuffer str2 = new StringBuffer("hello");
str2.append("world");
//3代表下标,可以在指定下标插入字符串
str2.insert(3, "hehe");
System.out.println(str2);

对此代码进行反汇编

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_反汇编_04

 

可以看出来其和StringBuilder基本相同,没有多余的对象产生。

它们三个的优缺点

由上面的实例可以看出来,String在追加的时候会产生新的对象耗费空间,所以在​​需要频繁的追加​​的时候,我们不使用String而使用StringBuilder和StringBuffer,因为其没有新的对象产生。

那么问题来了

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_字符串_05

 

StringBuilder和StringBuffer我们到底选哪一个呢?

查看StringBuilder源码

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_多线程_06

 

StringBuffer源码

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_字符串_07

 

可以看到StringBuffer的方法中有一个修饰符​​synchronized​​(synchronized是Java中的关键字,是一种同步锁)这个修饰符的意思就是这个方法是线程安全的,所以StringBuffer适用于多线程,而StringBuilder适用于多线程,因为在多线程中如果多个线程同时访问一个StringBuilder,又因为其没加锁,所以可能会出现错误,而在单线程中适用StringBuffer因为频繁的加锁解锁会影响代码的效率。

String类中的一些方法

1.subString

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_多线程_08

 

2.charAt

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_字符串_09

 

3.indexOf

查找字符

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_多线程_10

 

查找字符串

40-咸鱼学Java-String,StringBuilder,StringBuffer的异同_字符串_11

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
学习 Shell准没错 2022-12-22 04:10:32