Подтвердить что ты не робот

Где использовать StringBuffer/StringBuilder, чем String

Возможный дубликат:
String, StringBuffer и StringBuilder

Мы знаем, что String являются неизменяемыми, где StringBuffer/StringBuilder являются изменяемыми. Но иногда мы путаем, что использовать в нашем коде. Строка или StringBuffer/StringBuilder? Практически в нашем максимальном коде/кратком коде мы предпочитаем String чем StringBuffer/StringBuilder.

Этот вопрос заключается в том, чтобы решить путаницу, если у вас есть какая-то идея и правильная причина для этого, пожалуйста, дайте ответ.

4b9b3361

Ответ 1

Ниже приведено основное различие между этими тремя наиболее часто используемыми классами.

  • Объекты класса String неизменяемы, тогда как StringBuffer и Объекты StringBuilder изменяемы.
  • StringBuffer синхронизируется, пока StringBuilder не синхронизируется.
  • Оператор конкатенации "+" внутренне реализован с использованием StringBuffer или StringBuilder.

Критерии выбора среди Строка, StringBuffer и StringBuilder

  • Если значение Object не изменится, используйте String Class, потому что Объект String неизменен.
  • Если значение Object может измениться и будет доступно только из единственный поток, используйте StringBuilder, потому что StringBuilder синхронизированными.
  • В случае, если значение Object может измениться и будет изменено несколькими потоки, используйте StringBuffer, потому что StringBuffer синхронизирован.

Ответ 2

Основная идея состоит в том, что String неизменна. Поэтому, когда вы пытаетесь изменить его, создается новый объект. StringBuffer и StringBuilder являются изменяемыми. И разница в первом является потокобезопасной.

Общий подход к использованию StringBuilder заключается в анализе чего-либо, когда вы итеративно создаете объект String в безопасной среде NON.

Например, у вас есть массив чисел [1, 2, 3]. Чтобы создать объект "String1String2String3", вы можете использовать StringBuilder

StringBuilder builder = new StringBuilder();
foreach(Integer num : array) {
    builder.append("String").append(num);
}
builder.toString();

Это лучше, чем просто использовать String string = string + ("String" + num);. AFAIK, компилятор оптимизирует использование конкатенации строк в цикле для StringBuilder, но лучше использовать его вручную.

StringBuffer используется, когда у вас есть общие состояния, которые изменяются параллельными потоками.

Ответ 3

StringBuffers являются потокобезопасными, что означает, что у них есть синхронизированные методы для управления доступом, так что только один поток может одновременно получать синхронизируемый код объекта StringBuffer. Таким образом, объекты StringBuffer обычно безопасны для использования в многопоточной среде.

Доступ к StringBuilder не синхронизирован, поэтому он не является потокобезопасным. Не будучи синхронизированным, производительность StringBuilder может быть лучше, чем StringBuffer. Таким образом, если вы работаете в однопоточной среде, использование StringBuilder вместо StringBuffer может привести к увеличению производительности.