2013-04-05 5 views
0

Добрый вечер, я прочитал это заявление в блоге 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

+0

Глядя на StringBuilder javadoc, он говорит * Начиная с 1.5 *, поэтому до Java 1.5 вы не можете использовать класс, которого не было. Разве это не факт? –

ответ

3

Причина, по которой это небезопасно использовать в VM до 1,5, потому что StringBuilder просто не существовало до 1,5. Если вы посмотрите на JavaDoc for StringBuilder, вы увидите, что он вышел только с 1.5.

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