StringBuffer
в основном заменен на StringBuilder
, что быстрее, потому что оно не синхронизировано. String
хорошо, если вы не делаете много конкатенации.
Так как вы спрашиваете об этом в контексте Exception
генерации сообщений, я бы сказал, оставьте это простым и используйте String
. Хорошо спроектированные системы не должны генерировать Exception
так часто, что преимущество в производительности StringBuilder
/ StringBuffer
имеет значение.
То есть частота исключений должна быть достаточно низкой, чтобы способ создания подробного сообщения мало влиял на общую производительность. «Преждевременная оптимизация - корень всего зла». Оптимизируйте только те разделы, которые нуждаются в этом, на основе профилирования.
Если ваш код тратит значительное количество времени, которое динамически генерируется String
для Exception
, то что-то действительно не так с вашим дизайном. Оптимизация этой части процесса не принесет много пользы, потому что исключения в любом случае обходятся дорого (например, часть захвата трассировки стека).