Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Классы StringBuilder и StringBuffer






Классы StringBuilder и StringBuffer являются «близнецами» и по своему предназначению близки к классу String, но в отличие от последнего содержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять.

Основным отличием StringBuilder от StringBuffer является потокобезопасность последнего. Более высокая скорость обработки есть следствие отсутствия потокобезопасности класса StringBuilder. Его следует применять, если не существует вероятности использования объекта в конкурирующих потоках.

С помощью соответствующих методов и конструкторов объекты классов StringBuffer, StringBuilder и String можно преобразовывать друг в друга.

Конструктор класса StringBuffer (также как и StringBuilder) может принимать в качестве параметра объект String или неотрицательный размер буфера. Объекты этого класса можно преобразовать в объект класса String методом toString() или с помощью конструктора класса String.

Следует обратить внимание на следующие методы:

void setLength(int n) — установка размера буфера;

void ensureCapacity(int minimum) — установка гарантированного минимального размера буфера;

int capacity() — возвращение текущего размера буфера;

StringBuffer append(параметры) — добавление к содержимому объекта строкового представления аргумента, который может быть символом, значением базового типа, массивом и строкой;

StringBuffer insert(параметры) — вставка символа, объекта или строки в указанную позицию;

StringBuffer deleteCharAt(int index) — удаление символа;

StringBuffer delete(int start, int end) — удаление подстроки;

StringBuffer reverse() — обращение содержимого объекта.

В классе присутствуют также методы, аналогичные методам класса String, такие как replace(), substring(), charAt(), length(), getChars(), indexOf() и др.

/* # 5 # свойства объекта StringBuffer # DemoStringBuffer.java */

package by.bsac.strings;

public class DemoStringBuffer {

public static void main(String[] args) {

StringBuffer sb = new StringBuffer();

System.out.println(" длина —> " + sb.length());

System.out.println(" размер —> " + sb.capacity());

// sb = " Java"; // ошибка, только для класса String

sb.append(" Java");

System.out.println(" строка —> " + sb);

System.out.println(" длина —> " + sb.length());

System.out.println(" размер —> " + sb.capacity());

sb.append(" Internationalization");

System.out.println(" строка —> " + sb);

System.out.println(" длина —> " + sb.length());

System.out.println(" размер —> " + sb.capacity());

System.out.println(" реверс —> " + sb.reverse());

}

}

Результатом выполнения данного кода будет:

длина —> 0

размер —> 16

строка —> Java

длина —> 4

размер —> 16

строка —> JavaInternationalization

длина —> 24

размер —> 34

реверс —> noitazilanoitanretnIavaJ

При создании объекта StringBuffer конструктор по умолчанию автоматически резервирует некоторый объем памяти (16 символов), что в дальнейшем позволяет быстро менять содержимое объекта, оставаясь в границах участка памяти, выделенного под объект. Размер резервируемой памяти при необходимости можно указывать в конструкторе. Если длина строки StringBuffer после изменения превышает его размер, то емкость объекта автоматически увеличивается, оставляя при этом некоторый резерв для дальнейших изменений. Методом reverse() можно быстро изменить порядок символов в объекте.

Если метод, вызываемый объектом StringBuilder, производит изменения в его содержимом, то это не приводит к созданию нового объекта, как в случае объекта String, а изменяет текущий объект StringBuilder.

/* # 6 # изменение объекта StringBuilder # RefStringBuilder.java */

package by.bsac.strings;

public class RefStringBuilder {

public static void changeStr(StringBuilder s) {

s.append(" Certified");

}

public static void main(String[ ] args) {

StringBuilder str = new StringBuilder(" Oracle");

changeStr(str);

System.out.println(str);

}

}

В результате выполнения этого кода будет выведена строка:

Oracle Certified

Объект StringBuilder передан в метод changeStr() по ссылке, поэтому все изменения объекта сохраняются и для вызывающего метода.

Для классов StringBuffer и StringBuilder не переопределены методы equals() и hashCode(), т. е. сравнить содержимое двух объектов невозможно, следовательно хэш-коды всех объектов этого типа вычисляются так же, как и для класса Object. При идентичном содержимом у двух экземпляров, размеры буфера каждого могут отличаться, поэтому сравнение на эквивалентность объектов представляется неоднозначным.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.