Добрый вечер, я прочитал это заявление в блоге 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
A
ответ
3
Причина, по которой это небезопасно использовать в VM до 1,5, потому что StringBuilder
просто не существовало до 1,5. Если вы посмотрите на JavaDoc for StringBuilder
, вы увидите, что он вышел только с 1.5.
Что касается использования в 1.5+, вы в основном безопасны только при замене StringBuffer
в пользу StringBuilder
. Случай, когда вы не хотите этого делать, - это если в буфере имеется несколько потоков. Однако в большинстве случаев, когда вы просто хотите сделать String
и вернуть его, например, с помощью метода toString()
, вы должны быть в безопасности.
3
См http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
StringBuilder
не существовало до Java 1.5, поэтому ранее Java версии не будет иметь возможность использовать его.
Глядя на StringBuilder javadoc, он говорит * Начиная с 1.5 *, поэтому до Java 1.5 вы не можете использовать класс, которого не было. Разве это не факт? –