В этом руководстве мы углубимся в концепции Java String, StringBuilder и StringBuffer и поймем, какой класс мы должны использовать и когда.

Строки широко используются в качестве типа данных и позволяют программисту обрабатывать слова, предложения, телефонные номера или даже обычные числа. По сути, String — это объект, представляющий последовательность значений символов.

СТРУННЫЙ КЛАСС

Класс Java String — это стандартный класс, который поставляется вместе с Java и специально используется для обработки строк. Строковый класс Java реализует интерфейсы Serializable, Comparable и CharSequence. Массив символов также работает так же, как строка Java. Например:

char[] ch = {‘j’, ‘a’, ‘v’ , ‘a’};

String str = new String(ch);

Это инициализирует новую строку, которая будет иметь java в качестве своего содержимого.

Приведенные выше две строки можно записать как

String str = ”java”;

Наш первый способ инициализации строки показал нам, что строки содержат массив символов.

Говорят, что строки Java неизменяемы. Неизменяемый означает неизменяемый или неизменяемый, что означает, что после создания строкового объекта мы не можем изменить его содержимое.

Ниже мы можем увидеть пример, отражающий этот факт.

Здесь Gaurav не изменяется, но создается новый объект с Gaurav Sharma. Вот почему String известен как неизменяемый.

Но если мы явно присвоим его ссылочной переменной, он будет ссылаться на объект Gaurav Sharma.

Здесь мы изменили ссылку переменной s на строку “Gaurav sharma” с “Gaurav”.

Операции со строками

Есть много операций, которые мы можем выполнять со строками. Я собираюсь перечислить здесь самые важные.

  1. Конкатенация строк.
    В этом разделе рассматривается объединение двух или более строк с использованием различных методов.
  • Конкатенация строк с помощью оператора +

Мы можем соединить две строки с помощью оператора +, и он вернет строку, в которой содержимое обеих строк будет добавлено друг к другу.

Но оператор + может привести к неоднозначности в случае объединения строк с числами, давайте разберемся с этим на примере.

В этом примере мы видим, что конкатенация работает достаточно странно, чтобы заставить нас снова задуматься о выводе

Здесь мы получили вывод 50TestString2040, потому что конкатенация строк с использованием + создает новую строку и продолжает добавлять операнды в конец предыдущих операндов.

Давайте разберемся в этом утверждении немного подробнее, используя пошаговый подход.

Оператор10+20+20+s1+s2+20+40 работает следующим образом.

10+20=30
30+20=50
50+s1=50Test
50Test+s2=50TestString
50TestString+20=50TestString20
50TestString20+40=50TestString2040

ПРИМЕЧАНИЕ. Целое число, добавляемое к строке, всегда приводит к строке.

  • Конкатенация строк методом concat:

2. Сравнение строк

Для проверки равенства строк по значениям и ссылке используются различные методы. В java есть 3 способа сравнения строковых значений.

  • Сравнение строк по методу равенства

Метод String equals сравнивает строки на основе их содержимого. Он сравнивает строки на четность или равенство.

Класс String предоставляет 2 метода для сравнения содержимого.

public Boolean equals(String str)
public Boolean equalsIgnoreCase(String str)

Метод equals обычно сравнивает две строки, но также учитывает регистр

“Apple” != “apple”

но в случае equalsIgnoreCase утверждение будет верным

“Apple” == “apple”

  • Сравнение строк с помощью оператора ==

Оператор == сравнивает ссылку или расположение в памяти объектов в куче. Он не проверяет значение, которое проверяет для ссылки.

  1. s1==s2 верно, потому что оба имеют одинаковые адреса в пуле строковых констант. Чтобы узнать больше о пуле строковых констант, перейдите по этой ссылке, поскольку эта тема большая и выходит за рамки данного руководства.
    https://www.geeksforgeeks.org/string-constant-pool-in-java /
  2. s1==s3 является ложным, потому что всякий раз, когда мы создаем строковый объект с новым ключевым словом, мы выделяем новую область памяти в пуле строковых констант для этого объекта, поэтому s1 и s3 не ссылаются на одну и ту же область памяти в куче.
  • Сравнение строк с методом compareTo()

Метод compareTo() сравнивает обе строки лексикографически и возвращает целочисленное значение, указывающее, что первая строка меньше, равна или больше второй строки. Для двух строк s1 и s2, если

s1==s2 возвращает 0
s1›s2 возвращает положительное число
s1‹s2 возвращает отрицательное число

Здесь мы видим, что метод compareTo проверяет только относительный порядок букв в двух строках.

Некоторые важные методы класса String

КЛАСС СТРОКОВОГО БУФЕРА

Классы String и StringBuffer определены в пакете java.lang. Класс StringBuffer используется для создания изменяемой или модифицируемой строки. В String и StringBuffer все то же самое, за исключением того, что класс StringBuffer представляет расширяемую и записываемую последовательность символов. Можно заменить любой символ в StringBuffer, и мы также можем вставить символы в StringBuffer, и StringBuffer будет увеличиваться в размере сам по себе.

Мы можем объявить StringBuffer тремя способами (у него есть три конструктора), и мы увидим их все.

  1. StringBuffer str = new StringBuffer();
    Это создаст объект StringBuffer, который представляет собой буфер пустой строки с начальной емкостью 16 символов.
  2. StringBuffer str = new StringBuffer(String string);
    Это создаст объект StringBuffer с содержимым строки, переданной в качестве параметра.
  3. StringBuffer str = new StringBuffer(int size);
    Он создаст пустой объект StringBuffer с начальным размером, равным этому целому числу, переданному в качестве параметра.

Методы строкового буфера:

Некоторые методы отличают Stringbuffers от Strings, и мы собираемся обсудить их подробно.

  • добавить():

Метод append добавляет заданный аргумент в строку. Он принимает 3 типа аргументов String, int и Object.

Синтаксис:
StringBuffer append(String str)
StringBuffer append(int num)
StringBuffer append(Object obj)

Пример:

  • вставить()

Метод insert() вставляет заданную строку, символ или объект в другую строку в заданной позиции.

Синтаксис:
Вставка StringBuffer(int index, String str)
Вставка StringBuffer(int index, char ch)
Вставка StringBuffer(int index, Object obj)

Пример:

  • удалить()

Метод delete() используется для удаления символа из строки по индексу, или мы можем удалить символы в диапазоне.

Синтаксис:
StringBuffer insert(int startIndex, int endIndex)

Пример:

  • реверс()

Этот метод переворачивает строку. Он выполняет реверсирование строки на месте.

Синтаксис:
StringBuffer reverse()

Пример:

  • вместимость()

Метод capacity() класса StringBuffer в Java используется для возврата емкости буфера. По умолчанию строковый буфер имеет емкость 16 символов. Вызвав этот метод, мы можем рассчитать его текущую емкость.

Если количество символов увеличивается на текущую емкость, Stringbuffer увеличивает свой размер на (текущая емкость*2)+2

Пример:

КЛАСС STRINGBUILDER

Класс StringBuilder используется для создания изменяемых и модифицируемых строк так же, как класс StringBuffer, но единственная разница между StringBuffer и StringBuilder заключается в том, что StringBuffer синхронизируется. Все методы StringBuffer доступны в StringBuilder.

РАЗЛИЧИЯ МЕЖДУ КЛАССОМ STRING И STRINGBUFFER

Строка

  1. Класс String неизменяем.
  2. Строка работает медленно и потребляет больше памяти, когда мы объединяем слишком много строк, потому что каждый раз создается новый экземпляр.
  3. Класс String переопределяет метод equals() класса Object. Таким образом, вы можете сравнить содержимое двух строк с помощью метода equals().
  4. Класс String работает медленнее при выполнении операций конкатенации.
  5. Класс String использует пул констант String.

StringBuffer

  1. StringBuffer работает быстро и потребляет меньше памяти при объединении двух строк.
  2. Класс StringBuffer не переопределяет метод equals() класса Object.
  3. Класс StringBuffer быстрее при выполнении операций конкатенации.
  4. Класс StringBuffer является изменяемым.
  5. StringBuffer использует память кучи.

РАЗЛИЧИЯ МЕЖДУ КЛАССОМ STRINGBUILDER И STRINGBUFFER

StringBuffer

  1. StringBuffer синхронизирован, т. е. потокобезопасен. Это означает, что два потока не могут одновременно вызывать методы StringBuffer.
  2. StringBuffer менее эффективен, чем StringBuilder.
  3. StringBuffer был представлен в Java 1.0.

Построитель строк

  1. StringBuilder не синхронизируется, т. е. не ориентирован на многопотоковое исполнение. Это означает, что два потока могут одновременно вызывать методы StringBuilder.
  2. StringBuilder более эффективен, чем StringBuffer.
  3. StringBuilder был представлен в Java 1.5.

Итак, это все о классах String, StringBuffer и StringBuilder. Здесь мы узнали, что это за классы, что они могут делать и чего они не могут. Я надеюсь, вам понравилось читать и изучать эти классы в деталях.

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

Гаурав Шарма — заядлый читатель и страстный путешественник. Он пытается жить более значимой и целеустремленной жизнью, распространяя свои знания и свой жизненный опыт! Следуйте за ним в этом новом путешествии по балансированию цифровой и физической жизни. Он живет в Уттаракханде, Индия. Он есть в Instagram по адресу @golf._.sierra