tring,StringBuffer,StringBuilder的区别?
一、tring,StringBuffer,StringBuilder的区别
String
对于String来说,是把数据存放在了常量池中,因为所有的String,默认都是以常量形式保存,且由final修饰,因此在线程池中它是线程安全的。因为每一个String当被创建好了以后,他就不再发生任何变化,但是它的执行速度是最差的。
我们要创建String的时候,他在常量池中对这些信息进行处理,如果在程序中出现了大量字符串拼接的工作,效率是非常底下的。
因此使用场景是在少量字符串操作的时候才建议直接使用String来操作。
StirngBuffer
StringBuffer相对于StringBuilder效率要相对低一点,但也远比String要高的多。效率低的原因:对于StringBuffer来说更多的考虑到了多线程的情况,在进行字符串操作的时候,它使用了synchronize关键字,对方法进行了同步处理。
因此StringBuffer适用于多线程环境下的大量操作。
StringBuilder
线程安全与线程不安全:
在进行多线程处理的时候,如果多个线程对于这一个对象同时产生操作,会产生预期之外的结果。对于StringBuilder来说,执行效率虽然高,但是因为线程不安全,所以不建议在多线程的环境下对同一个StringBuilder对象进行操作。
因此StringBuilder适用于单线程环境下的大量字符串操作。
延伸阅读:
二、什么是字符串常量池
Java中的字符串常量池(String Pool)是Java堆内存中的一片内存空间。
我们知道String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引号(”“)创建字串对象,看下图:
String s1 = “Cat”当我们用这种方式创建字符串对象的时候,首先会去字符串常量池中查找看有没有“Cat”字符串,如果有则返回它的地址给s1,如果没有则在常量池中创建“Cat”字符串,并将地址返回给s1.
String s3 = new String(“Cat”)当我们用这种方式创建字符串对象的时候,首先会去字符串常量池中查找看有没有“Cat”字符串,如果没有则在常量池中创建“Cat”字符串,然后在堆内存中创建“Cat”字符串,并将堆内存中的地址返回给s3.
所以结果 s1 == s2 为true s1==s3为false,s1和s2都指向了常量池中的“Cat”而s3指向了堆内存中的“Cat”
大家想想 如果有这么一行代码 String str = new String(“hello”)
在内存中会创建几个字符串对象?
答案是一个或两个
如果常量池中已经存在“hello”,则会在堆内存中创建一个“hello”对象,如果常量池中不存在则在常量池中创建一个,在堆内存中创建一个。
通过引入字符串常量池的概念,让字符串处理的效率得到了提高,这是jvm对字符串的一种优化手段。

猜你喜欢LIKE
相关推荐HOT
更多>>
一个搜索框对应数据库多个字段,后台怎么对应?
一、一个搜索框对应数据库多个字段,后台对应的方法 1、使用SQL语句自定义查询条件可以在后台使用SQL语句自定义搜索的查询条件,将多个字段拼接...详情>>
2023-10-15 23:26:29
用Visual Studio连接Access数据库为什么只识别.mdb格式不识别.accdb格式?
一、用Visual Studio连接Access数据库为什么只识别.mdb格式不识别.accdb格式如果VBA或Visual studio中c#无法读取Accdb格式,可能是电脑没有安装...详情>>
2023-10-15 21:27:21
Spark SQL和Oracle、MySQL有什么区别?
一、Spark SQL和Oracle、MySQL有什么区别SQL,在这里我理解成SQL Server。三者是目前市场占有率较高(依安装量而非收入)的关系数据库,而且很...详情>>
2023-10-15 16:10:33
MySQL的自增ID用完了怎么办?
一、MySQL的自增ID用完了的解决办法1、调整自增ID的数据类型如果使用的是整数类型的自增ID,可以考虑将其修改为更大的整数类型,如将INT类型改...详情>>
2023-10-15 13:27:09热门推荐
一个搜索框对应数据库多个字段,后台怎么对应?
沸有没有什么基于postgresql的newsql?
热sql server 2017安装时出现错误怎么办?
热如何将Word中大量格式重复的文本转换成表格或者录入数据库?
新用Visual Studio连接Access数据库为什么只识别.mdb格式不识别.accdb格式?
elasticsearch也具有存储功能,为什么感觉平时看到的方案,更多是和其他数据库一起用?
hive里面的分区表和分桶表一般用于什么场景?
MySQL里面怎么给视图增加索引?
同一个服务器建立多个数据库和一个数据库上建立多个实例有什么区别?
高级子查询、嵌套子查询、相关子查询、普通子查询的区别?
synchronized锁的升级原理是什么,以及各个锁的状态对比?
epoll lt/et模式区别是什么?
为什么说MySQL Cluster是shared-nothing架构的?
安卓APP开发工具有哪些?
技术干货






