Когда нужно использовать String и когда нужно использовать StringBuilder?
Какие отличия?
Максим,
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");
Надеюсь мой ответ Вам что-то да прояснил.
Полезные ресурсы :
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, за исключением того, что он не синхронизирован, что делает его значительно шустрее. Но цена скорости - небезопасное поведение в мультипоточной среде.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я не могу понять, как растянуть вкладки (EXPRESS и LOGISTICS) на требуемую ширину и убрать отступ между ними
Напечатать на консоль наибольшее число строк из переданных, которые являются перестановками друг другаЕсли ни одна из строк не является...
Нужен обычный список "select" который бы заполнился данными из json-файла по полю value