字符串变量Sting,StringBuffer,StringBuilder的区别

本文讲述了字符串变量Sting,StringBuffer,StringBuilder的相同点,不同点和使用方法

String

String 对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象,即修改了 String 的引用。 因为 String 的底层是用数组来存值的,数组长度不可改变这一特性导致了上述问题。‌如果我们在实际开发过程中需要对某个字符串进行频繁的修改,使用 String 就会造成内存空间的浪费。

String str = "helloWord"
str=str+"first"

第一次创建,helloWorld开辟一个控件储存helloWorld,
第二次做修改,字符串的值str也就变成了helloWorldfirst,而helloWorldfirst则是储存在了新的空间内,也就是一个str最修改之后占用了两个空间,造成了内存空间的浪费。而怎么解决这个问题呢,当然是使用StringBuffer了。

StringBuffer

由于字符串是常量,因此一旦创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。为了便于对字符串的修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)。StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类似一个字符容器,当在其中添加或删除字符时,并不会产生新的Stringuffer 对象。
向StringBuffer字符串中拼接字符串当然是要使用append方法。

StringBuilder

StringBuilder的原理和StringBuffer一样,不同之处在于StringBuilder不需要考虑线程安全。而使用StringBuffer要考虑一下线程安全的问题。
StringBuilder的追加字符串的方法和StringBuffer的一样,都是使用append方法。

Sting与StringBuffer,StringBuilder的区别

StringBuilder 对象和StringBuffer对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值,当修改 StringBuilder 和StringBuffer时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量。
两者的区别:

  1. string 对象时恒定不变的,StringBuider对象和StringBuffer对象表示的字符串是可变的。stringBuilder是.net提供的动态创建string的高效方式,以克服string对象恒定性带来的性能影响。
  2. 对于简单的字符串连接操作,在性能上stringBuilder和StringBuffer并不一定总是优于string。因为stringBuider和StringBuffer对象创建代价较大,在字符串目标连接较少的情况下,过度滥用stringBuilder和StringBuffer对象会导致性能的浪费,只有大量的或者无法预知次数的字符串操作,才考虑stringBuilder和StringBuffer对象来实现。事实上,一般连接次数设置100次以内,根本看不出两者的性能差别。
  3. 当修改字符串信息时,此时不许创建对象,可以使用stringBuilder对象

总结

总体来说他们的区别只有下面两点:
1.String类的内容一旦声明了则不可改变,而StringBuffer类以及StringBuilder类的内容可以随意改变。
2.StringBuffer类的方法都是同步方法,属于线程安全操作;而StringBuilder中的方法都属于异步方法,属于非线程安全型操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值