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