Что такое string java
Перейти к содержимому

Что такое string java

  • автор:

Что такое String в Java?

String представляет собой последовательность символов и является неизменяемым типом данных. Это означает, что, создав строковый объект, его содержимое нельзя изменить. String предоставляет множество методов для работы с текстовой информацией, делая его основным классом для работы со строками в Java.

Работа с ним:

  • Строки могут быть созданы с использованием литералов (например, «Привет, мир!» ) или с помощью конструктора:
String strLiteral = "Привет, мир!"; String strConstructor = new String("Привет, мир!");
  • Строковый объект, созданный в Java, не может быть изменен после своего создания. Любые операции, модифицирующие строку, создают новый объект.
String original = "Java"; String modified = original.concat(" is powerful");
  • Для сравнения строк используется метод equals() , а также операторы == и != .
String str1 = "Hello"; String str2 = "Hello"; boolean isEqual = str1.equals(str2); // true
  • Класс String предоставляет множество методов для работы со строками, таких как length() , charAt() , substring() , toLowerCase() , toUpperCase() и другие.

Строки — Java: Введение в ООП

Среди встроенных в Java типов данных, строки стоят особняком. У них настолько необычное поведение, что его нужно разбирать отдельно. Строки — это объекты класса java.lang.String , а не примитивные значения, как можно было бы подумать. Но они существуют в двух формах для производительности. Иногда строки ведут себя как примитивные значения, иногда как объекты.

Зачем строки сделаны объектами? По двум причинам. У строк много полезного поведения, которое удобно реализовать в виде методов. Строки имеют непостоянную длину, по техническим причинам, такие данные внутри памяти хранятся не как примитивные объекты.

Строки как объекты:

// Такой способ работы называется String Literal // Когда строка создается из литерала, специального // синтаксиса для создания строки (текст обрамленный кавычками) var name1 = "Hexlet"; name1.toUpperCase(); // "HEXLET" // Этот способ называется String Object var name2 = new String("Hexlet"); // Тут то же самое name2.toUpperCase(); // "HEXLET" 

С другой стороны, если мы попытаемся сравнить две строки, то получим неожиданный результат:

var name1 = "Hexlet"; var name2 = "Hexlet"; name1 == name2; // true 

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

В реальных приложениях строки создаются в больших количествах на каждом шагу. Постоянное создание новых объектов приводило бы к огромному расходу памяти. Разработчики Java схитрили. Если строка создается как String Literal, то объект создается только при первом появлении такого значения строки. Второе и последующие создания строки с уже существующим значением будут ссылаться на ту первую строку:

// Внутри JVM создается объект new String() var lang1 = "Java"; // // "Java" уже была, поэтому объект не создаем // ссылаемся на уже созданный ранее var lang2 = "Java"; // Тоже ссылка на первую строку var lang3 = "Java"; lang1 == lang2; // true lang2 == lang3; // true lang1 == lang3; // true 

Но если строки созданы как объекты сразу, например через new String() , то они будут сравниваться по стандартной схеме:

var lang1 = new String("Java"); var lang2 = new String("Java"); lang1 == lang2; // false 

Логично, но неудобно. В реальном коде сравнивать строки по ссылкам бессмысленно, строки сравнивают по значению. Программисты, в своем коде редко создают строки как объекты и, казалось бы проблемы нет. Если использовать String Literal, то все будет хорошо. К сожалению, эта логика не работает, Java много где выполняет автоматическое преобразование String Literal в String Object:

var lang = "Java"; // Казалось бы одинаковые значения lang.toUpperCase(); // "JAVA" lang.toUpperCase(); // "JAVA" // А теперь сравним lang.toUpperCase() == lang.toUpperCase(); // false 

Вот это уже проблема. И она настолько важная, что в строки встроили метод equals() , который сравнивает их по значению независимо ни от чего:

var lang1 = new String("Java"); var lang2 = new String("Java"); lang1.equals(lang2); // true 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Что такое string java

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

Anonymous #3346398 Уровень 16
9 декабря 2023

Не удобнее использовать Integer.valueOf для получения числа из строки, вместо parseInt, если мы хотим получить сразу обертку?

Alex Уровень 16
20 августа 2023

В примере вывода имени файла зачем указан комментарий //9? вывод программы будет Futurama.mp4 Разве не это должно быть указано в комментарии?

Anatoly Уровень 28
18 августа 2023
2 августа 2023

Почему у вас почти везде в темах есть ссылки на другие темы/источники/подтемы и у них свои такие же ссылки. Ну сколько можно? Это неудобно становится учить.

String (Java)

String — класс в языке Java, представляющий строку. Входит в пакет java.lang, а потому этот класс не требуется импортировать.

Является наследником базового суперкласса Object . Реализует интерфейсы Serializable , [[Comparable (Java)|Comparable]] , CharSequence .

Объявление класса String выглядит следующим образом:

public final class String

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

Любой объект Java может быть преобразован в строку посредством вызова метода toString().

  • 1 Описание
  • 2 Конструкторы
  • 3 Методы
    • 3.1 Унаследованные от класса Object

    Описание [ править ]

    Класс String является неизменяемым, любые операции над строками ведут к порождению нового объекта, содержащего результат операции. String является thread-safe, то объекты этого класса могут использоваться во множестве потоков без дополнительной синхронизации.

    Класс String — единственный класс, для ссылок которого определена операция сложения.

    String str = «Java»;
    String str2 = » 8″;
    String str3 = str + str2;
    System.out.println(str3);//выводит «Java 8» (без кавычек)

    Надо отметить, что конкатенация строк может привести к перерасходу памяти, особенно при использовании в цикле. Поэтому в ситуациях, когда необходима частая конкатенация, лучше использовать объекты StringBuffer или StringBuilder , представляющие изменяемые строки.

    Для записи строк можно использовать литералы (строки, записанные в двойных кавычках). При необходимости записать двойную кавычку, она экранируется обратным слешем.

    String str = «abc»;

    char data[] = ;
    String str = new String(data);

    Ниже приведено несколько примеров использования строк:

    System.out.println(«abc»);
    String zelev = «Зелев велик»;
    System.out.println(«abc» + zelev);
    String c = «abc».substring(2, 3);// «c»
    String d = zelev.substring(1);// «Зелев велик»

    Класс содержит множество методов, позволяющих осуществлять различные манипуляции со строками, например, выделять подстроки, находить нужный символ или сравнивать строки. Отображение символов основано на стандартной версии Юникода.

    Конструкторы [ править ]

    Не рекомендованные к применению (Deprecated).

    Аргументы Описание
    String() Инициализирует объект, представляющий собой пустую последовательность символов.
    String(byte[] bytes) Создаёт новый объект, расшифровывающий указанный массив bytes , используя кодировку платформы по умолчанию.
    String(byte[] bytes, Charset charset) Создаёт новый объект, расшифровывая указанный массив bytes с использованием заданной кодировки charset .
    String(byte[] ascii, int hibyte) Неправильно преобразовывает байты в символы. Вместо него предпочтительно использовать конструкторы, которые принимают название кодировки или используют кодировку по умолчанию.
    String(byte[] bytes, int offset, int length) Создаёт новую строку посредством раскодировки заданного подмассива байтов, используя кодировку платформы по умолчанию.
    String(byte[] bytes, int offset, int length, Charset charset) Создаёт новую строку посредством раскодировки заданного подмассива байтов, используя указанную кодировку.
    String(byte[] ascii, int hibyte, int offset, int count) Неправильно преобразовывает байты в символы. Вместо него предпочтительно использовать конструкторы, которые принимают название кодировки или используют кодировку по умолчанию.
    String(byte[] bytes, int offset, int length, String charsetName) Создаёт новую строку посредством раскодировки заданного подмассива байтов, используя указанную кодировку.
    String(byte[] bytes, String charsetName) Создаёт новую строку посредством раскодировки заданного массива байтов, используя указанную кодировку.
    String(char[] value) Выделяет новую строку, так, что она представляет собой последовательность символов, содержащихся в массиве типа char .
    String(char[] value, int offset, int count) Выделяет новую строку, которая содержит символы из подмассива массива типа char .
    String(int[] codePoints, int offset, int count) Выделяет новую строку, которая содержит символы из подмассива массива кодовых точек Юникода.
    String(String original) Инициализирует только что созданный объект так, что он представляет собой ту же последовательность символов, что и аргумент. Иными словами, вновь созданная строка является копией аргумента.
    String(StringBuffer buffer) Выделяет новую строку, содержащую последовательность символов, и находящуюся в аргументе buffer .
    String(StringBuilder builder) Выделяет новую строку, содержащую последовательность символов, и находящуюся в аргументе builder .

    Методы [ править ]

    Не рекомендованные к применению (Deprecated).

    Тип возвращаемого значения Название и аргументы Выполняемое действие
    char charAt(int index) Возвращает символ по указанному индексу.
    int codePointAt(int index) Возвращает символ (кодовая точка Юникода) по указанному индексу.
    int codePointBefore(int index) Возвращает символ (кодовая точка Юникода) до указанного индекса.
    int codePointCount(int beginIndex, int endIndex) Возвращает количество кодовых точек Юникода в указанном диапазоне.
    int compareTo(String anotherString) Производит лексикографическое сравнение двух строк.
    int compareToIgnoreCase(String str) Производит лексикографическое сравнение двух строк, игнорируя регистр символов.
    String concat(String str) Объединяет указанную строку с концом данной строки.
    boolean contains(CharSequence s) Возвращает истину если эта и только эта строка содержит указанную последовательность символов.
    boolean contentEquals(CharSequence cs) Сравнивает данную строку с указанным CharSequence .
    boolean contentEquals(StringBuffer sb) Сравнивает данную строку с указанным StringBuffer .
    static String copyValueOf(char[] data) Возвращает строку, которая представляет собой последовательность символов в указанном массиве.
    static String copyValueOf(char[] data, int offset, int count) Возвращает строку, которая представляет собой последовательность символов в указанном массиве.
    boolean endsWith(String suffix) Проверяет, заканчивается ли данная строка указанной.
    boolean equals(Object anObject) Сравнивает данную строку с указанным объектом.
    boolean equalsIgnoreCase(String anotherString) Сравнивает данную строку с указанной, игнорируя регистр символов.
    static String format(Locale l, String format, Object. args) Возвращает отформатированную строку, используя указанный регион, форматирующую строку и аргументы.
    static String format(String format, Object. args) Возвращает отформатированную строку, используя форматирующую строку и аргументы.
    byte[] getBytes() Кодирует заданную строку в последовательность байтов, используя платформенную кодировку по умолчанию; результат сохраняется в новый массив.
    byte[] getBytes(Charset charset) Кодирует заданную строку в последовательность байтов, используя указанную кодировку; результат сохраняется в новый массив.
    void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) Неправильно преобразовывает символы в байты; вместо него следует использовать метод getBytes() .
    byte[] getBytes(String charsetName) Кодирует заданную строку в последовательность байтов, используя charsetName ; результат сохраняется в новый массив.
    void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Копирует символы из заданной строки в целевой массив символов.
    int hashCode() Возвращает хэш-код для этой строки.
    int indexOf(int ch) Возвращает индекс первого вхождения указанного символа.
    int indexOf(int ch, int fromIndex) Возвращает индекс первого вхождения указанного символа, начиная поиск с указанного индекса.
    int indexOf(String str) Возвращает индекс первого вхождения указанной подстроки.
    int indexOf(String str, int fromIndex) Возвращает индекс первого вхождения указанной подстроки, начиная поиск с указанного индекса.
    String intern() Возвращает каноническое представление строкового объекта.
    boolean isEmpty() Возвращает истину, если длина строки равна нулю.
    int lastIndexOf(int ch) Возвращает индекс последнего вхождения указанного символа.
    int lastIndexOf(int ch, int fromIndex) Возвращает индекс последнего вхождения указанного символа, начиная поиск в обратном порядке с указанного индекса.
    int lastIndexOf(String str) Возвращает индекс последнего вхождения указанной подстроки.
    int lastIndexOf(String str, int fromIndex) Возвращает индекс последнего вхождения указанной подстроки, начиная поиск в обратном порядке с указанного индекса.
    int length() Возвращает длину строки.
    boolean matches(String regex) Проверяет, соответствует ли данная строка указанному регулярному выражению.
    int offsetByCodePoints(int index, int codePointOffset) Возвращает индекс внутри данной строки, смещённый от указанного индекса на codePointOffset кодовых точек.
    boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) Проверяет, равны ли регионы двух строк.
    boolean regionMatches(int toffset, String other, int ooffset, int len) Проверяет, равны ли регионы двух строк.
    String replace(char oldChar, char newChar) Возвращает новую строку, производя замену всех вхождений oldChar на newChar .
    String replace(CharSequence target, CharSequence replacement) Возвращает новую строку, производя замену всех подстрок, соответствующих target , на строку replacement .
    String replaceAll(String regex, String replacement) Заменяет каждую подстроку данной строки, которая соответствует указанному регулярному выражению с указанной заменой.
    String replaceFirst(String regex, String replacement) Заменяет первую подстроку данной строки, которая соответствует указанному регулярному выражению с указанной заменой.
    String[] split(String regex) Разбивает строку на фрагменты, используя в качестве разделителей символы, входящие в аргумент regex , и возвращает ссылку на массив, составленный из этих фрагментов.
    String[] split(String regex, int limit) Разбивает строку на фрагменты, используя в качестве разделителей символы, входящие в аргумент regex , и возвращает ссылку на массив, составленный из этих фрагментов.
    boolean startsWith(String prefix) Проверяет, начинается ли данная строка с указанной.
    boolean startsWith(String prefix, int toffset) Проверяет, начинается ли подстрока данной строки с указанного индекса, начиная с указанного префикса.
    CharSequence subSequence(int beginIndex, int endIndex) Возвращает новую последовательность символов, представляющую собой подпоследовательность данной последовательности.
    String substring(int beginIndex) Возвращает новую строку, представляющую собой подстроку данной строки.
    String substring(int beginIndex, int endIndex) Возвращает новую строку, представляющую собой подстроку данной строки.
    char[] toCharArray() Преобразует данную строку в новый массив символов.
    String toLowerCase() Преобразует все символы данной строки в нижний регистр, используя правила по умолчанию.
    String toLowerCase(Locale locale) Преобразует все символы данной строки в нижний регистр, используя указанные правила.
    String toString() Данный объект возвращает сам себя.
    String toUpperCase() Преобразует все символы данной строки в верхний регистр, используя правила по умолчанию.
    String toUpperCase(Locale locale) Преобразует все символы данной строки в верхний регистр, используя указанные правила.
    String trim() Возвращает новую строку, из которой исключены все предшествующие и завершающие пробелы.
    static String valueOf(boolean b) Возвращает строковое представление аргумента boolean .
    static String valueOf(char c) Возвращает строковое представление аргумента char .
    static String valueOf(char[] data) Возвращает строковое представление массива char .
    static String valueOf(char[] data, int offset, int count) Возвращает строковое представление конкретного подмассива указанного массива char .
    static String valueOf(double d) Возвращает строковое представление аргумента double .
    static String valueOf(float f) Возвращает строковое представление аргумента float .
    static String valueOf(int i) Возвращает строковое представление аргумента int .
    static String valueOf(long l) Возвращает строковое представление аргумента long .
    static String valueOf(Object obj) Возвращает строковое представление аргумента Object .

    Унаследованные от класса Object [ править ]

    Ссылки [ править ]

    • Класс String (англ.) . Java™ Platform Standard Ed. 7. Проверено 27 октября 2013.
    • Ах, эти строки. (блог skipy.ru)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *