Разница между классом String и StringBuffer в Java

Автор: Laura McKinney
Дата создания: 3 Апрель 2021
Дата обновления: 16 Май 2024
Anonim
Java SE. Урок 27. Классы StringBuilder / StringBuffer и их методы
Видео: Java SE. Урок 27. Классы StringBuilder / StringBuffer и их методы

Содержание


String и StringBuffer оба являются классами, которые работают со строками. Класс StringBuffer является одноранговым классом класса String. Объект класса String имеет фиксированную длину. Объект класса StringBuffer является расширяемым. Основное различие между String и StringBuffer состоит в том, что объект класса «String» неизменный, Объект класса «StringBuffer» изменчивый.

  1. Сравнительная таблица
  2. Определение
  3. Ключевые отличия
  4. Заключение

Сравнительная таблица

Основа для сравнениястрокаStringBuffer
основнойДлина объекта String фиксирована.Длина StringBuffer может быть увеличена.
модификацияСтроковый объект является неизменным.Объект StringBuffer является изменяемым.
ПредставлениеЭто медленнее во время конкатенации.Это быстрее во время объединения.
ПамятьПотребляет больше памяти.Потребляет меньше памяти.
Место храненияСтрунно-постоянный пул.Память кучи.


Определение строки

«Строка» - это класс в Java. Объект класса String имеет фиксированную длину, и наиболее важно помнить, что объект класса String является «неизменяемым». После инициализации объекта String вы не сможете снова изменить этот объект. Объект класса String хранится в пуле констант String.

Давайте сначала поймем, что всякий раз, когда вы создаете какую-либо строку; Вы создаете объект типа строка. Строковые константы также являются строковыми объектами.

System.out.ln («Привет, это решение Teckpix»);

В приведенном выше утверждении строка «Hello this is Teckpix Solution» является строковой константой.

Теперь давайте разберемся с изменчивостью объекта String с помощью примера.

String str = new String ("Teckpix"); str.concat ( "Решение"); system.out.ln (str); // вывод Teckpix

В приведенном выше коде я попытался объединить две строки «Teckpix» и «Solution». Как мы знаем, когда создается строка, это означает, что создается объект типа String. Следовательно, строка «Teckpix» создает объект, ссылка на который присваивается строковому объекту «str». Затем я попытался объединить другую строку «Solution» со строкой «Teckpix», используя метод «concat ()» класса String.


Поскольку объекты String являются неизменяемыми, в строку «Teckpix» не вносятся никакие изменения, а новая строка «Solution» создает другой объект в пуле строковых констант. Но ссылка на объект «Solution» не перехватывается никаким объектом, поэтому ссылка на объект Solution теряется, хотя она все еще присутствует в пуле строковых констант. Поскольку никакие изменения не выполняются для объекта Teckpix, когда я, объект str, которому я ранее назначил ссылку на Teckpix, будет только строка «Teckpix».

Определение StringBuffer

Класс «StringBuffer» является одноранговым классом класса «String». Класс StringBuffer обеспечивает больше функциональности для строк. Объект класса StringBuffer является изменяемым, то есть его объект может быть изменен. Длина объекта StringBuffer может быть увеличена. Вы можете вставить символы или подстроки в середину строкового литерала, который назначен объекту StringBuffer или в его конце. StringBuffer выделяет пространство для 16 дополнительных символов, когда не запрашивается конкретная длина.

Давайте разберемся с изменчивостью объекта StringBuffer с помощью примера:

StringBuffer Sb = new StringBuffer ("Teckpix"); Sb.append ( "Решение"); system.out.ln (Sb); // Вывод решения Teckpix

Как известно, объект StringBuffer является изменяемым. Метод append () изменяет объект Sb StringBuffer, которому изначально указывается ссылка на объект «Teckpix» ранее. Метод append () добавляет новый строковый литерал «Solution» к концу строкового литерала «Teckpix». Теперь, когда я использую объект Sb, это будет модифицированный строковый объект «Teckpix Solutions».

  1. Длина объекта String фиксирована, но при необходимости можно увеличить длину объекта StringBuffer.
  2. Строковый объект является неизменным, т. Е. Его объект не может быть переназначен, тогда как объект StringBuffer является изменяемым.
  3. Объект String работает медленнее, тогда как объект StringBuffer работает быстрее.
  4. Объект String занимает больше памяти, тогда как объекты StringBuffer занимают меньше памяти.
  5. Строковые объекты хранятся в постоянном пуле, тогда как объекты StringBuffer хранятся в динамической памяти.

Заключение:

Объекты StringBuffer предоставляют больше функциональности строкам по сравнению с классом String. Следовательно, предпочтительнее работать с StringBuffer вместо класса String.