2010-09-24 81 views
7

StringBuffer vs StringBuilder VS StringTokenizer在内部实现上有什么区别。何时使用这些。请等待答案。StringBuffer vs StringBuilder VS StringTokenizer

更新: -

我也在浏览源代码。

+1

[StringBuilder和StringBuffer之间的差异可能的重复](http://stackoverflow.com/questions/355089/difference-between-stringbuilder-and-stringbuffer) – 2016-06-20 13:33:08

回答

17

StringBuffer - 在推出JDK 1.0 - 是线程安全的(它的所有方法都是​​),而自从JDK 1.5以来,StringBuilder不是。因此建议在正常情况下使用后者。

StringTokenizer是为了一个完全不同的目的,然后前两个:切割成块,而不是组装。正如@Henning指出的那样,它自JDK 1.5以来也“退役” - 建议使用String.split代替。

+0

'StringTokenizer'虽然不被弃用,但也是一个“遗留因为兼容性原因而保留的类,尽管在新代码中不鼓励使用它“。 http://download.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html – Henning 2010-09-24 09:51:56

+0

@亨宁,感谢您的注意 - 我更新了我的答案,包括这一点。 – 2010-09-24 09:53:44

5
  • StringBuffer被设计为线程安全的,StringBuffer中的所有公共方法都是同步的。 StringBuilder不处理线程安全问题,并且它的任何方法都没有同步。

  • 在大多数情况下,StringBuilder比StringBuffer具有更好的性能。

  • 尽可能使用新的StringBuilder。

HereStringBuilder & StringBuffer

的StringBuilder &的performance comparison的StringBuffer存放字符串,其中StringoTokeizer类允许应用程序将字符串分解为标记。所以它像鹤立鸡群

3

的StringBuffer - 的StringBuilder的同步版本(其不同步对等后引入)

+0

说“StringBuilder是StringBuffer的非同步版本”不是更简单更清楚吗? – 2010-09-24 09:57:11

+0

我在java 1.5以前的版本中工作了很多,因为没有StringBuilder,所以我的参考点是StringBuffer :-) – Gadolin 2010-09-24 10:24:42

+0

@PeterTörök:不是。它非常简单明了,它也是一种历史视角,你的不是。 – EJP 2010-09-25 02:43:48

1

的StringBuffer用作相同的目的的StringBuilder除了StringBuffer的是线程安全。
StringTokenizer用于根据某些分隔符将字符串拆分为令牌。