StringBuffer与StringBuilder与StringTokenizer的区别

9

StringBuffer和StringBuilder在内部实现上有什么区别?StringTokenizer又是什么?何时使用它们?期待您的回答。

更新:

我也在查看源代码。


1
可能是Difference between StringBuilder and StringBuffer的重复问题。 - Jess Bowers
请查看我在此答案中制作的漂亮图表,概述了与字符串相关的类。 - Basil Bourque
4个回答

21

StringBuffer是在JDK 1.0中引入的,它是线程安全的(所有方法都是synchronized),而StringBuilder自JDK 1.5以来就不是线程安全的。因此,在正常情况下推荐使用后者。

StringTokenizer的用途与前两者完全不同:将字符串分割成片段,而不是组装。正如@Henning所指出的那样,自JDK 1.5以来它已经"被弃用",建议使用String.split代替。


StringTokenizer虽然没有被废弃,但它仍然是一个“保留的遗留类,为了兼容性而被保留,尽管在新代码中不建议使用”。http://download.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html - Henning
@Henning,谢谢您的提醒 - 我更新了我的答案以包含这个。 - Péter Török

9
  • StringBuffer被设计为线程安全的类,StringBuffer的所有公共方法都是同步的。StringBuilder不处理线程安全问题,它的所有方法都未同步。

  • 在大多数情况下,StringBuilder的性能优于StringBuffer。

  • 尽可能使用新的StringBuilder。

这里StringBuilder和StringBuffer的性能比较

StringBuilder和StringBuffer是用来保存字符串的类,而StringTokenizer类则允许应用程序将一个字符串分解为多个标记,所以它是与前两者不同的类。


4

StringBuffer - 是 StringBuilder 的同步版本(在其非同步的对等项之后引入)


说“StringBuilder是StringBuffer的非同步版本”不是更简单、更清晰吗? - Péter Török
我之前在Java 1.5之前工作了很多,那时还没有StringBuilder,所以我的参考点是StringBuffer :-) - Gadolin
@Peter Török:不,现在这样非常简单明了,并且还提供了历史背景,而你的则没有。 - user207421

3

StringBuffer的作用和StringBuilder相同,只是StringBuffer是线程安全的。
StringTokenizer用于根据一些分隔符将字符串拆分为标记。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接