string,stringbuffer,stringbuilder三者之间关系及区别

string对象是不可变得,查看JDK文档就会发现,string中的每一个看起来修改字符串的方法,其实都是创建了一个新的string对象。

正是因为string是一个不可变的量,所以才有了以下几个优点:

1、只有当字符串不可变时,所以多线程中使用是安全的

2、只有当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。

3、如果字符串是可变的话可能会造成很大的安全问题

stringbuilder和stringbuffer主要区别是在于stringbuffer是线程安全的而stringbuilder是线程不安全的,

正是因为这个区别决定了他们不同的使用场景

相较于stringbuffer而言,stringbuilder在速度上优于stringbuffer,所以大多数场景下stringbuilder的使用率更高,但是由于stringbuilder的线程不安全所以stringbuilder更适用于单线程下操作字符串缓冲区下的大量数据

三者应用场景总结如下:

string适用于操作少量数据。

stringbuffer线程安全 适用于多线程下操作字符串缓冲区下的大量数据

stringbuilder:线程不安全适用于单线程下操作字符串缓冲区下的大量数据。

三者之间的区别如下:

string 不可变字符串

stringbuffer 可变字符串 线程安全 效率低

stringbuilder 可变字符串 线程不安全 效率高

如有不对之处,请多多指教,谢谢!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值