晚上好,我在博客中读到这些声明在早于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/