Добрый вечер, я прочитал это утверждение в блоге it's NOT safe to replace a StringBuffer object with a StringBuilder in java version earlier than 1.5
, и это кажется фактом, но для этого нет видимой причины !!, я знаю, что StringBuffer расширяет класс java.lang.AbstractStringBuilder. StringBuilder также расширяет AbstractStringBuilder, поэтому он также наследует эти методы, поэтому с точки зрения компилятора вы можете безопасно заменить StringBuffer на StringBuilder. Конечно, StringBuilder не синхронизируется, поэтому, если вы заботитесь о синхронизации, вы не можете заменить строковый буфер на построитель строк, поэтому, с моей точки зрения, синхронизация — единственный фактор, о котором мы могли подумать при замене строкового буфера на построитель строк, но кажется что есть еще один фактор JAVA Version
, но я не знаю, как это повлияет на решение, пожалуйста, обсудите это со мной.
почему НЕ безопасно заменять объект StringBuffer на StringBuilder в версии Java до 1.5
Ответы (2)
Причина, по которой его небезопасно использовать в виртуальной машине до версии 1.5, заключается в том, что StringBuilder
просто не существовало до версии 1.5. Если вы посмотрите на JavaDoc для StringBuilder
, вы можно видеть, что он вышел только с версии 1.5.
Что касается того, когда использовать его в 1.5+, вы в большинстве случаев можете просто заменить StringBuffer
на StringBuilder
. Случай, когда вы не хотели бы этого делать, - это если у вас есть более одного потока, записывающего в буфер. Однако в большинстве случаев, когда вы просто хотите создать String
и вернуть его, например, из метода toString()
, вы должны быть в безопасности.
См. http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
StringBuilder
не существовало до Java 1.5, поэтому более ранние версии Java не могли его использовать.