StringBuffer与 StringBuilder 有什么区别?

孤尽JavaSea 2009-03-06 04:32:56
到底什么才是线程安全。
...全文
639 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
zybzhen 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 zybzhen 的回复:]
多线程 与 私有 变量
是有关系的
如果你的变量 不是私有 的,并且 你的对象不是单例的 基本不存在 线程不安全问题
[/Quote]

写错了 不是私有 是静态,呵呵。
zybzhen 2009-03-09
  • 打赏
  • 举报
回复
多线程 与 私有 变量
是有关系的
如果你的变量 不是私有 的,并且 你的对象不是单例的 基本不存在 线程不安全问题
zybzhen 2009-03-09
  • 打赏
  • 举报
回复
StringBuilder 的功能 跟
String a;
a+ new String()+new String
的效果差不多

而且 编译器 自动把Stringa;a=a+newString();译成为
StringBuilder a ;
a.append(new String());
lzbang 2009-03-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
比如多个线程,同时向一个对象进行操作时,StringBuffer就是安全的,不会出现内部的混乱,而StringBuilder则不是,可能产生数据混乱。
[/Quote]

UP
tebaton 2009-03-08
  • 打赏
  • 举报
回复
受教了
lihan6415151528szb 2009-03-08
  • 打赏
  • 举报
回复
单一线程中用StringBuffer
多线程中用StringBuilder
kingssman 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
比如多个线程,同时向一个对象进行操作时,StringBuffer就是安全的,不会出现内部的混乱,而StringBuilder则不是,可能产生数据混乱。
[/Quote]

就是这样的,呵呵
多线程就好比有很多人同时去使用同一个东西,这个东西就有可能被不同的人改掉,其他人并不知道这个改变就会出问题,
单线程就好比一个人使用一个东西,即使改变了也知道是自己改掉的
w3lmcctl 2009-03-06
  • 打赏
  • 举报
回复
JDK API:
StringBuilder
This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.
licip 2009-03-06
  • 打赏
  • 举报
回复
java2000_net 把线程安全性描述得非常形象。
也可以说,如果单线程运行与多线程并行运行处理的结果都对,没有造成混乱那就说明是线程安全的。
Coolfatman 2009-03-06
  • 打赏
  • 举报
回复
几乎所有的线程安全都比线程不安全的慢。
遥望星尘 2009-03-06
  • 打赏
  • 举报
回复
学习~~~
humcomm 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
比如多个线程,同时向一个对象进行操作时,StringBuffer就是安全的,不会出现内部的混乱,而StringBuilder则不是,可能产生数据混乱。
[/Quote]
补充下:线程安全是指可以保证多线程时对同一对象的操作只有一个线程在进行,进而保证不会出现数据的混乱
wangzhouyu 2009-03-06
  • 打赏
  • 举报
回复
没有线程同步问题的时候先考虑使用StringBuilder,效率要高些
sdfczyx 2009-03-06
  • 打赏
  • 举报
回复
我在开发过程中一直用的就是stringbuffer,这个安全性没问题的.
时光瞄 2009-03-06
  • 打赏
  • 举报
回复
和楼主一样,不是很明白
Hozenplotz 2009-03-06
  • 打赏
  • 举报
回复
线程安全就是同步的,但是速度慢
线程不安全就是不同步的,但是速度快
java代码在编译的时候,会自动把安全的String转换为StringBuilder来处理,以提高效率
wafnny 2009-03-06
  • 打赏
  • 举报
回复
StringBuffer线程安全,效率低点。其他基本没什么差别
junjun1984 2009-03-06
  • 打赏
  • 举报
回复
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。 当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。 每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
Landor2004 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 danielzhan 的回复:]
StringBuffer是线程安全的.
StringBuilder不是线程安全的,它的运行速度比StringBuffer快.
[/Quote]
对,StringBuilder在jdk5以上版本中才出现的
danielzhan 2009-03-06
  • 打赏
  • 举报
回复
StringBuffer是线程安全的.
StringBuilder不是线程安全的,它的运行速度比StringBuffer快.
加载更多回复(13)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧