java String,StringBuilder和StringBuffer类的区别
对String而言:
String是只读字符串,所引用的字符串不能被改变,一经定义,无法再增删改。
String 定义的字符串保存在常量池里面,进行+操作时不能直接在原有基础上拼接。
每次+操作 : 隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼接+后面的字符。
例如:
String str1="ss"; StringBuilder str2=new StringBuilder(ss);
str1=str1+"oo"; 等于 str2.append(oo);
(Java6和6之前,常量池是存放在方法区中的。
Java7,将常量池是存放到了堆中,常量池就相当于是在永久代中,所以永久代存放在堆中。
Java8之后,取消了整个永久代区域,取而代之的是元空间。没有再对常量池进行调整。)
区别
String是只读字符串,所引用的字符串不能被改变,Stringbuffer和Stringbuilder定义的可以通过各种方法来达到简单的增删改;
String和Stringbuilder在单线程环境下使用;
StringBuffer在多线程环境下使用,可以保证线程同步;
Stringbuilder 和StringBuffer 实现方法类似,均表示可变字符序列,不过StringBuffer 用synchronized关键字修饰(保证线程同步)
运行速度
当需要对某一字符串大量重复+操作时:
Stringbuilder 最快,不需要考虑线程同步;
StringBuffer次之;
String最慢,因为每次都要重新开辟内存,产生很多匿名对象,影响系统性能。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步