Единственный пример в реальном мире, о котором я могу думать, это то, что вы нацеливаете Java-версии befere 1.5. Класс StringBuilder
был введен в 1.5, поэтому для более старых версий вместо этого вы должны использовать StringBuffer
.
В большинстве случаев StringBuilder
следует использовать по соображениям безопасности - требуется дополнительная защита резьбы, обеспечиваемая StringBuffer
. Я не могу придумать каких-либо очевидных ситуаций, в которых смысл StringBuffer
. Возможно, есть некоторые, но я не могу сейчас думать об этом.
В самом деле, кажется, что даже авторы библиотеки Java признают, что StringBuffer
был mistake:
Оценка командой библиотек:
Это дизайн, что StringBuffer и StringBuilder не разделяют никакого общего населения супертип. Они не предназначены для альтернатив: является ошибкой (StringBuffer), а другая (StringBuilder) является его заменой.
Если StringBuilder
был добавлен в библиотеку, сначала StringBuffer
, вероятно, не был бы добавлен. Если вы находитесь в ситуации, когда несколько потоков, добавляемых к одной и той же строке, кажется хорошей идеей, вы можете легко получить безопасность потоков, синхронизируя доступ к StringBuilder
. Нет необходимости в дополнительном классе и всей путанице, которую он вызывает.
Возможно, также стоит отметить, что библиотека базового класса .NET, которая сильно вдохновлена библиотеками Java, имеет класс StringBuilder
, но не StringBuffer
, и я никогда не видел, чтобы кто-то жаловался на это.
Я думаю, что это должно быть «StringBuffer WAS очень популярный выбор с программистами», пока не был введен StringBuilder :) –