Разница между классом String и StringBuffer в Java
Содержание
String и StringBuffer оба являются классами, которые работают со строками. Класс StringBuffer является одноранговым классом класса String. Объект класса String имеет фиксированную длину. Объект класса StringBuffer является расширяемым. Основное различие между String и StringBuffer состоит в том, что объект класса «String» неизменный, Объект класса «StringBuffer» изменчивый.
- Сравнительная таблица
- Определение
- Ключевые отличия
- Заключение
Сравнительная таблица
Основа для сравнения | строка | 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».
- Длина объекта String фиксирована, но при необходимости можно увеличить длину объекта StringBuffer.
- Строковый объект является неизменным, т. Е. Его объект не может быть переназначен, тогда как объект StringBuffer является изменяемым.
- Объект String работает медленнее, тогда как объект StringBuffer работает быстрее.
- Объект String занимает больше памяти, тогда как объекты StringBuffer занимают меньше памяти.
- Строковые объекты хранятся в постоянном пуле, тогда как объекты StringBuffer хранятся в динамической памяти.
Заключение:
Объекты StringBuffer предоставляют больше функциональности строкам по сравнению с классом String. Следовательно, предпочтительнее работать с StringBuffer вместо класса String.