string、stringbuffer和stringbuilder的区别

最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。

他们的优缺点在哪里呢?下面来看下

1、运行速度String<StringBuffer<StringBuilder

2、原因:String字符串常量,不可改变的对象,任何对String的改变都会创建新的String对象,而原有的对象就会变成垃圾被GC回收;而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。而StringBuffer与StringBuilder都是append,他们的区别在哪呢?先说一下集合的故事,HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也是如此,他们的原理和操作基本相同,区别在于StringBufferd支持并发操作,线性安全的,适 合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。

3、举例

String str = "This is a " + "simple" + "example";
StringBuffer builder= new StringBuffer("This is a ").append("simple").append("example");

从这我们会发现生成str对象的速度非常的快,StringBuffer占不到什么优势,这是为什么呢?

jvm会认为其实String str = "This is a " + "simple" + "example";就是String str = "This is a simple example";所以不需要什么时间。

但是当字符来至不同的String对象时,就没那么快了。

比如:

String str1 = "This is a ";
    String str2 = "simple";
    String str3 = "example";
    String str = str1 + str2 + str3;

jvm会老老实实的按规矩来重新创建对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值