String , StringBuilder StringBuffer 的区别

引言

String , StringBuilder StringBuffer 的区别,这个问题是面试中经常被问到的经典问题,今天有空,整理下,顺便翻译下国外的一篇文章,以分享给大家,希望对各位有所帮助,也欢迎大家在评论区指出文章不足之处,讨论交流String , StringBuilder StringBuffer 的区别。谢谢各位!

原文来源

如果你英文很不错,还是看原文比较好

Difference Between String , StringBuilder And StringBuffer Classes With Example : Java

译文

Difference Between String , StringBuilder And StringBuffer Classes With Example : Java

今天我们要理解下String , StringBuilder StringBuffer 的区别。并且你会发现在以上提到的类中有微小的区别

String

String 是 不可变的对象(一旦创建 就不能被改变)。String 对象被存储在Constant String Pool中(字符串池)。Java中每一个不变的对象都是线程安全的,这意味着String也是线程安全的。String 不能同时被两个线程使用。

String  demo = " hello " ;
//上面的对象被被存储在Constant String Pool中(字符串池),它的值不能被改变
demo="Bye" ;//新的“Bye”字符串在字符串池中被创建,并且被demo 引用
//“hello”字符串仍然存在在字符串池,它的值也没有被重新,但是我们失去了对“hello”字符串的引用

StringBuffer

StringBuffer 是可变的,意味着你可以改变对象的值。StringBuffer创建的对象被保存在“堆”上。StringBuffer与StringBuilder有相同的方法,但是StringBuffer中的每一个方法都是同步的,也就是线程安全的。

所以, 它不允许连个线程同时进入同一个方法。一个方法一次只能被一个线程访问。

但是线程安全也有劣势。StringBuilder比StringBuffer更快。

StringBuffer 可以转换成String类型通过 toString 方法。

StringBuffer demo1 = new StringBuffer("Hello") ;
// The above object stored in heap and its value can be changed .
上面这个对象存储在堆上,其值可以被改变
demo1=new StringBuffer("Bye");
// Above statement is right as it modifies the value which is allowed in the StringBuffer
上面的代码是正确的,并且它修改了StringBuffer的值

StringBuilder

StringBuilder 也是讲创建的对象存储在堆上。主要区别在于StringBuilder是线程不安全的,所以StringBuilder更快一些。

StringBuilder demo2= new StringBuilder("Hello");
// The above object too is stored in the heap and its value can be modified
//上面这个对象存储在堆上,其值可以被改变

demo2=new StringBuilder("Bye"); 
// Above statement is right as it modifies the value which is allowed in the StringBuilder
//上面的代码是正确的,并且它修改了StringBuilder的值

对比

指标StringStringBufferStringBuilder
存储地字符串池
是否可变不可变可变可变
线程是否安全线程安全线程安全线程不安全
速度表现较慢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值