String,StringBuffer与StringBuilder的区别

String,StringBuffer与StringBuilder的区别一、JavaString类——String字符串常量字符串广泛应用 在Java编程中,在Java中字符串属于对象,Java提供了 String类来创建和操作字符串。需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:我们可…

大家好,又见面了,我是你们的朋友全栈君。

一、Java String 类——String字符串常量

字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:

String,StringBuffer与StringBuilder的区别

我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费。为了应对经常性的字符串相关的操作,谷歌引入了两个新的类——StringBuffer类和StringBuild类来对此种变化字符串进行处理。

二、Java StringBuffer 和 StringBuilder 类——StringBuffer字符串变量、StringBuilder字符串变量

String,StringBuffer与StringBuilder的区别

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

三者的继承结构

String,StringBuffer与StringBuilder的区别

三者的区别:

String,StringBuffer与StringBuilder的区别

(1)字符修改上的区别(主要,见上面分析)

(2)初始化上的区别,String可以空赋值,后者不行,报错

①String

String s = null;   

String s = “abc”;   

②StringBuffer

StringBuffer s = null; //结果警告:Null pointer access: The variable result can only be null at this location

StringBuffer s = new StringBuffer();//StringBuffer对象是一个空的对象

StringBuffer s = new StringBuffer(“abc”);//创建带有内容的StringBuffer对象,对象的内容就是字符串”

小结:(1)如果要操作少量的数据用 String;

(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;

(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。

转载自https://blog.csdn.net/weixin_41101173/article/details/79677982,感谢整理和分享!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153401.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 导航上显示某个地点已关闭什么意思_大众MIB(275)教程之导航使用「建议收藏」

    导航上显示某个地点已关闭什么意思_大众MIB(275)教程之导航使用「建议收藏」大众可以说近几年的发展非常快,仅车载收音机都更换了好几代了。从最初的单纯收音机到后来的6碟CD机RCD510,最初国内上市的导航RNS510,还有后来自带蓝牙的RNS315,再到PQ平台187A,当初抄的也是火的很几乎每天都能看到187A的帖子,直到出现了升级版的187B,这个自带carplay和百度canlife的PQ平台的机器一下将老款车型导航的改装推上了最巅峰,也把一款拆车机…

    2022年5月7日
  • pychar激活码【注册码】「建议收藏」

    pychar激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
  • 关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解[通俗易懂]

    关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解[通俗易懂]lambda是Python编程语言中使用频率较高的一个关键字。那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多。这里,我们通过阅读各方资料,总结了关于Python中的lambda的“一个语法,三个特性,四个用法,一个争论”。欢迎阅读和沟通(个人微信:slxiaozju)。由于文章是从我的公众号上复制过来的,因此排版不整齐,但是内容绝对充实,欢迎关注公众…

    2022年8月12日
  • CS和BS 到底是什么[通俗易懂]

    CS和BS 到底是什么[通俗易懂]C/S:Client/Server,客户端/服务器B/S:Browser/Server,浏览器/服务器cs,主要指的是传统的桌面级的应用程序,基于客户端的应用。bs,主要指的是web应用程序,基于浏览器的应用。区别[1]语言:C/S:c,c++,B/S:java,php,.Net,js,nodeJs[2]更新:C/S:下载新版本的客户端,升级不大方便。B/S:热更新,永远都是最新的。[3]数据通信:C/

    2022年9月9日
  • python创建文件和文件夹

    python创建文件和文件夹创建文件夹importosdefmkdir(path): folder=os.path.exists(path) ifnotfolder:#判断是否存在文件夹如果不存在则创建为文件夹 os.makedirs(path)#makedirs创建文件时如果路径不存在会创建这个路径 print”—

    2022年6月16日
  • jasypt 原理_litmp试剂

    jasypt 原理_litmp试剂文章目录一、jasypt的启动类加载二、jasypt中Encryptor、Detector和Resolver加载三、jasypt中EnableEncryptablePropertiesBeanFactoryPostProcesso四、proxy代理方式增强propertySources五、wrapper包装类方式增强propertySources六、resolver中属性值解密作者:史佳健推荐理由:文章详尽并有对应分析说明一、jasypt的启动类加载引入了jasypt-spring-boot-st

    2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号