java - 为什么在 1.5 之前的 java 版本中用 StringBuilder 替换 StringBuffer 对象是不安全的

标签 java stringbuilder scjp stringbuffer

晚上好,我在博客中读到这些声明在早于1.5的java版本中用StringBuilder替换StringBuffer对象是不安全的这似乎是事实,但没有明显的原因为此!!,我知道 StringBuffer 正在扩展类 java.lang.AbstractStringBuilder。 StringBuilder 还扩展了 AbstractStringBuilder,因此它也继承了这些方法。因此从编译器的角度来看,您可以安全地用 StringBuilder 替换 StringBuffer。当然 StringBuilder 不是同步的,所以如果你关心同步,你不能用字符串生成器替换字符串缓冲区,所以在我看来,同步是我们在用字符串生成器替换字符串缓冲区时可以想到的唯一因素,但似乎还有另一个因素JAVA版本,但我不知道这些因素如何影响决策,请与我讨论这些点。

最佳答案

在 1.5 之前的 VM 中使用它不安全的原因是 StringBuilder 在 1.5 之前不存在。如果你看JavaDoc for StringBuilder你可以看到它从1.5开始就退出了。

关于何时在 1.5+ 中使用它,您只需将 StringBuffer 替换为 StringBuilder 即可。您不想这样做的情况是,如果您有多个线程写入缓冲区。但是,在大多数情况下,当您只想创建一个 String 并从 toString() 方法返回它时,例如,您应该是安全的。

关于java - 为什么在 1.5 之前的 java 版本中用 StringBuilder 替换 StringBuffer 对象是不安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844328/

相关文章:

java - 如何在 android 中使用 ShapeDrawable 以编程方式创建圆角边框?

java - 使用注释配置引用多个bean

java - 关于字符串连接行为

java - 元素的优先级队列排序

java - 哪些声明有效?

java - 在Java中如何用数字元素和空格分割字符串并将其存储到可索引数组中?

java - 如何设置Listner停止动画并向MainActivity Android发送回调

带有 printf 的 Java StringBuilder。等效的 String.format

java - 无法使用 JSON 解析子项

java合法标识符