Java String, StringBuffer 和 StringBuilder 类的使用时机

Java为字符串对象提供了三个类,分别为String,StringBuffer,StringBuilder。这三个类都可以用于表示字符串对象。每个类都有其具体的用途。根据需求的不同,其中一个类可能会是更好的选择。下面的例子描述使用String,StringBuffer,StringBuilder的时机。

String

String类的一个重要特征是它是不可变的。即使String类包含了像replace和toUpperCase这样的方法,String表示的字符串对象依然保持不变。相反地,这些方法返回一个新的String对象。例如,toLowerCase方法返回一个字符全为小写的新的String对象。这里提供一个建议,为那些不再改变的String对象使用String类。

StringBuilder

StringBuilder类表示可改变的字符串对象。它包含了项append和insert这样的会改变字符串对象的方法。例如,append方法在StringBuilder对象末尾添加一个字符串,原来的字符串对象被改变了,这个过程中没有新的对象创建或返回。通常地,为那些将会改变的字符串对象使用StringBuilder类。

StringBuffer

StringBuffer类和StringBuilder类很相似。两者之间的主要区别在于StringBuffer是同步的,换句话说,就是多线程环境下可以安全地操作StringBuffer对象。然而,为了是StringBuffer同步将消耗额外的开销。所以,StringBuffer要比StringBuilder慢,为那些将需要被多个线程修改的字符串对象使用StringBuffer。

明智地选择字符串类

选择错误的字符串类可以导致无法想象的结果。例如,你可以容易的在一个String对象末尾添加一个字母X:String s = s + "X"。但是拼接操作在一个循环中是低效的。这是因为String类要创建一个StringBuilder或StringBuffer对象去做这样的拼接工作。每次都创建这样一个对象的开销是客观的。

这个例子的一个更好的选择是使用StringBuilder类。例如,我们可以简单地在StringBuilder对象末尾添加一个字母X:sbd.append('X');这要比前面的例子中的做法快很多。在一个遍历次数为200,000的样例测试中,前面那个例子所花费的时间接近1分钟,但StringBuilder只用了不到1秒钟的时间。

如果你在多线程中操作字符串时,StringBuffer将会是一个更好的选择。但是在一个一百万次遍历的样例测试中,StringBuffer比StringBuilder慢了5倍。然而StringBuffer保证了线程安全。换句话说,在多线程的程序中使用StringBuilder你会获得无法预期的结果。

结论:

正如你所看到的,String,StringBuilder和StringBuffer这三个类并不是可以互相替换的。选择符合你需求的字符串类,不然你的程序将会十分低效或者出错。

原文地址:点击打开链接

http://www.examiner.com/article/when-to-use-the-java-string-stringbuffer-and-stringbuilder-classes

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值