почему НЕ безопасно заменять объект StringBuffer на StringBuilder в версии Java до 1.5

Добрый вечер, я прочитал это утверждение в блоге 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, но я не знаю, как это повлияет на решение, пожалуйста, обсудите это со мной.


person Java Player    schedule 05.04.2013    source источник
comment
Глядя на javadoc StringBuilder, он говорит Since 1.5, поэтому до Java 1.5 вы не можете использовать несуществующий класс. Разве это не факт?   -  person Luiggi Mendoza    schedule 06.04.2013


Ответы (2)


Причина, по которой его небезопасно использовать в виртуальной машине до версии 1.5, заключается в том, что StringBuilder просто не существовало до версии 1.5. Если вы посмотрите на JavaDoc для StringBuilder, вы можно видеть, что он вышел только с версии 1.5.

Что касается того, когда использовать его в 1.5+, вы в большинстве случаев можете просто заменить StringBuffer на StringBuilder. Случай, когда вы не хотели бы этого делать, - это если у вас есть более одного потока, записывающего в буфер. Однако в большинстве случаев, когда вы просто хотите создать String и вернуть его, например, из метода toString(), вы должны быть в безопасности.

person Todd    schedule 05.04.2013

См. http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

StringBuilder не существовало до Java 1.5, поэтому более ранние версии Java не могли его использовать.

person miorel    schedule 05.04.2013