Где использовать StringBuffer/StringBuilder, чем String
Возможный дубликат:
String, StringBuffer и StringBuilder
Мы знаем, что String
являются неизменяемыми, где StringBuffer
/StringBuilder
являются изменяемыми. Но иногда мы путаем, что использовать в нашем коде. Строка или StringBuffer/StringBuilder? Практически в нашем максимальном коде/кратком коде мы предпочитаем String
чем StringBuffer
/StringBuilder
.
Этот вопрос заключается в том, чтобы решить путаницу, если у вас есть какая-то идея и правильная причина для этого, пожалуйста, дайте ответ.
Ответы
Ответ 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 может привести к увеличению производительности.