freeCodeCamp/guide/russian/java/strings/index.md

8.6 KiB
Raw Blame History

title localeTitle
Strings Строки

Строки

Строки - это последовательности символов. В Java String наследует класс Object . Строки не следует путать с типом данных char так как char это лишь один символ, а не последовательность символов. Вы все равно можете использовать String для хранения одного символа, однако в таком случае предпочтительнее использовать char.

String course = "FCC"; 
 System.out.println(course instanceof Object); 

Вывод:

true 

Вы можете создать объект String следующими способами:

  1. String str = "Это строка"; //как значение строки
  2. String str = "Это " + "строка"; //как выражение константа
  3. String str = new String("Это строка"); //как объект класса String используя конструктор

Возможно, вы думаете: в чем разница между этими тремя?

Используя ключевое слово new гарантирует, что будет создан новый объект String, и новая ячейка памяти будет выделена в Heap памяти (нажмите здесь, чтобы узнать больше). Cтроковые литералы и постоянные выражения String кэшируются во время компиляции. Компилятор помещает их в пул строк String для предотвращения дублирования и улучшения потребления памяти. Распределение памяти для объектов дорогое, и этот прием увеличивает производительность при создании строк. Если вы используете те же самые значения строк, JVM использует тот же объект. Использование такого конструктора, как и выше, почти всегда является худшим выбором.

В этом фрагменте кода сколько объектов String создано?

String str = "Это строка"; 
 String str2 = "Это строка"; 
 String str3 = new String("Это строка"); 

Ответ: 2 Создаются объекты String. str и str2 оба относятся к одному и тому же объекту. str3 имеет то же самое значение, но с использованием ключевого словаnew произойдет принудительное создание нового, отличного объекта.

Когда вы создаете строковый литерал, JVM внутренне проверяет пул строк, так называемый String pool , чтобы увидеть, может ли он найти аналогичный (по значению) строковый объект. Если он найдет его, он вернет ту же ссылку. В противном случае он просто продолжит работу и создаст новый объект String в пуле, чтобы такая же проверка могла быть выполнена в будущем.

Вы можете проверить это, используя быстрое сравнение объектов == и реализованное equals() .

System.out.println(str == str2); // Выведет 'true' 
 System.out.println(str == str3); // Выведет 'false' 
 System.out.println(str.equals(str3)); // Выведет 'true' 

Вот еще один пример того, как создать строку в Java с помощью разных методов:

public class StringExample{ 
 
   public static void main(String args[]) { 
      String s1 = "java";  // создание строки присвоением строкового значения
      char ch[] = {'s','t','r','i','n','g','s'}; 
      String s2 = new String(ch);  // конвертация массива символов в строку
      String s3 = new String("example");  // создание нового объекта строки используя слово new 
      System.out.println(s1); 
      System.out.println(s2); 
      System.out.println(s3); 
   } 
 } 

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

Если вы хотите сравнить значение двух переменных String, вы не можете использовать ==. Это связано с тем, что это будет сравнивать ссылки переменных а не значения, которые связаны с ними. Чтобы сравнить значения строк, вы используете метод equals().

boolean equals(Object obj) 

Он возвращает true, если два объекта равны и false в противном случае.

String str = "Hello world"; 
 String str2 = "Hello world"; 
 
 System.out.println(str == str2); // Выведет false 
 System.out.println(str.equals(str2); // Выведет true 

Первое сравнение ложно, потому что «==» рассматривает ссылки, и они не совпадают.

Второе сравнение верно, потому что переменные хранят одни и те же значения. В этом случае «Hello world».

У нас есть несколько встроенных методов в String. Ниже приведен пример метода String.length(), который вычисляет длину строки в символах.

public class StringDemo { 
 
   public static void main(String args[]) { 
      String palindrome = "Dot saw I was Tod"; 
      int len = palindrome.length(); 
      System.out.println( "String Length is : " + len ); 
   } 
 } 

Это приведет к: - String Length is : 17

Ответ: 2

Создаются объекты String.

Заметки

  1. В методах String используются индексы с нулевым значением, за исключением второго аргумента substring() .
  2. Класс String является окончательным - его методы нельзя переопределить.
  3. Когда литерал String найден JVM, он добавляется в пул строковых литералов.
  4. Класс String имеет имя метода length() , а массивы имеют длину имени атрибута.
  5. В java строковые объекты неизменяемы. Неизменяемый просто означает что созданную строку нельзя изменить. После создания строкового объекта его данные или состояние не могут быть изменены, но создается новый строковый объект.

Длина строки

«Длина» строки - это просто количество символов в ней. Итак, «hi» - длина 2, а «Hello» - длина 5. Метод length () в строке возвращает свою длину, например:

String a = "Hello"; 
 int len = a.length();  // длина равна 5 

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

  1. equalsIgnoreCase(): - сравнивает строку без учета чувствительности к регистру.
String a = "HELLO"; 
 String b = "hello"; 
 System.out.println(a.equalsIgnoreCase(b));   // It will print true 
  1. compareTo(): - сравнивает значение лексикографически и возвращает целое число.
String a = "Sam"; 
 String b = "Sam"; 
 String c = "Ram"; 
 System.out.println(a.compareTo(b));       // 0 
 System.out.prinltn(a.compareTo(c));       // 1 потому что (a > b) 
 System.out.println(c.compareTo(a));       // -1 потому что (c < a)