String или StringBuilder (использование)

137
04 декабря 2019, 13:50

Когда нужно использовать String и когда нужно использовать StringBuilder?
Какие отличия?

Answer 1

Максим,

String

Это immutable объект, что значит если Вы единожды его создали изменить объект (именно объект, а не ссылку на него) Вы уже не сможете. Каждый String объект помещается в Constant String Pool, на объекты которого, по сути, движок может устанавливать несколько ссылок. И поскольку String immutable, следовательно он потокобезопасен.

StringBuilder

В отличие от String является mutable, что означает что само состояние объекта может меняться. Часто, говоря о StringBuilder следует упомянуть и о StringBuffer. Оба класса имеют одинаковые методы, вот только в StringBuffer все методы синхронизированы, что делает его потокобезопасным (ровно как и String). StringBuilder в свою очередь является не потокобезопасным. Однако плата за потокобезопасность - производительность. Синхронизированные методы работают медленнее, поэтому StringBuilder будет работать быстрее, чем StringBuffer.

Иными словами:

String a = "a";
String b = "b";
String c = "a" + "b"

В результате этого кода будет создано 3 объекта: "a", "b" и "ab".

Но если переписать тоже самое, используя StringBuilder, будет создан всего один объект "ab" (минуя создание промежуточных "a" и "b").

StringBuilder builder = new StringBuilder("a");
builder.append("b");

Надеюсь мой ответ Вам что-то да прояснил.

Answer 2

Полезные ресурсы :

http://www.quizful.net/interview/java/string-stringbuffer-difference

https://bunkerbook.ru/uroki-po-java/raznitsa-mezhdu-string-i-stringbuffer-stringbuilder-v-Java/

https://o7planning.org/ru/10217/java-string-stringbuffer-and-stringbuilder-tutorial

При работе с текстовым данными, Java предоставляет вам 3 класса String, StringBuffer и StringBuilder.

Класс String является immutable - Вы не можете модифицировать объект String, но можете заменить его созданием нового экземпляра. Создание нового экземпляра обходится дороговато.От этого класса нельзя унаследоваться.Может использоваться для регистрации, ауетентификиции в приложении. У String создается строковый пул, благодаря тому, что строка - неизменима. Отличный кандидат для ключа в Map, так как ее Hashcode кэшируется в момент создания. Так же строки исползуются в java classloader и благодаря своей неизменности - обеспечивает правильность загрузки класса при помощи Classloader .

Класс StringBuffer является mutable - использовать StringBuffer или StringBuilder следует тогда, когда вы хотите модифицировать содержимое. StringBuilder был добавлен в пятой джаве и он во всем идентичен классу StringBuffer, за исключением того, что он не синхронизирован, что делает его значительно шустрее. Но цена скорости - небезопасное поведение в мультипоточной среде.

READ ALSO
Как стилизовать вкладки (CSS)

Как стилизовать вкладки (CSS)

Я не могу понять, как растянуть вкладки (EXPRESS и LOGISTICS) на требуемую ширину и убрать отступ между ними

156
Работа со строками (перестановки)

Работа со строками (перестановки)

Напечатать на консоль наибольшее число строк из переданных, которые являются перестановками друг другаЕсли ни одна из строк не является...

171
Список по данным из JSON-файла

Список по данным из JSON-файла

Нужен обычный список "select" который бы заполнился данными из json-файла по полю value

150