Рядки в Java

Струни

Рядки - це послідовності символів. У Java, a Stringє Object. Рядки не слід плутати, charоскільки символи мають буквально 1 значення, а не послідовність символів. Ви все ще можете використовувати 1 значення в рядку, однак його краще використовувати charпід час перевірки на наявність 1 символу.

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

Вихід:

true

Ви можете створити об’єкт рядка наступними способами:

  1. String str = "I am a String"; //as a String literal
  2. String str = "I am a " + "String"; //as a constant expression
  3. String str = new String("I am a String"); //as a String Object using the constructor

Ви можете подумати: яка різниця між цими трьома?

Ну, використання newключового слова гарантує, що Stringбуде створено новий об'єкт і буде виділено нове місце в Heapпам'яті (натисніть тут, щоб дізнатись більше). Рядкові літерали та постійні вирази рядків кешуються під час компіляції. Компілятор поміщає їх до String Literal Pool для запобігання дублікатів та покращення споживання пам'яті. Виділення об’єктів є дорогим, і цей фокус підвищує продуктивність під час створення рядків. Якщо ви знову використовуєте той самий літерал, JVM використовує той самий об'єкт. Використання підрядника, як вище, майже завжди є гіршим вибором.

У цьому фрагменті коду скільки об’єктів String створено?

String str = "This is a string"; String str2 = "This is a string"; String str3 = new String("This is a string");

Відповідь: створено 2 об’єкти рядка. strі str2обидва посилаються на один і той же об’єкт. str3має такий самий зміст, але використання newпримусово створює новий, виразний об’єкт.

Коли ви створюєте літерал String, JVM внутрішньо перевіряє, що називається,, String poolщоб перевірити, чи може він знайти подібний (вміст) об’єкт String. Якщо знаходить, повертає те саме посилання. В іншому випадку він просто продовжує і створює новий об’єкт String у пулі, щоб та сама перевірка могла бути виконана в майбутньому.

Ви можете перевірити це за допомогою ластівки, швидкого порівняння об’єктів ==та реалізованого equals().

System.out.println(str == str2); // This prints 'true' System.out.println(str == str3); // This prints 'false' System.out.println(str.equals(str3)); // This prints 'true'

Ось ще один приклад того, як створити рядок у Java за допомогою різних методів:

public class StringExample{ public static void main(String args[]) { String s1 = "java"; // creating string by Java string literal char ch[] = {'s','t','r','i','n','g','s'}; String s2 = new String(ch); // converting char array to string String s3 = new String("example"); // creating Java string by new keyword System.out.println(s1); System.out.println(s2); System.out.println(s3); } }

Порівняння струн

Якщо ви хочете порівняти значення двох рядкових змінних, ви не можете використовувати ==. Це пов’язано з тим, що це дозволить порівняти посилання на змінні, а не значення, пов’язані з ними. Для порівняння збережених значень рядків ви використовуєте метод дорівнює.

boolean equals(Object obj)

Він повертає істину, якщо два об'єкти рівні, а в іншому випадку помилкові.

String str = "Hello world"; String str2 = "Hello world"; System.out.println(str == str2); // This prints false System.out.println(str.equals(str2); // This prints true

Перше порівняння хибне, оскільки ”==” переглядає посилання, і вони не однакові.

Друге порівняння є істинним, оскільки змінні зберігають однакові значення. В даному випадку “Привіт світ”.

У нас є кілька вбудованих методів у рядку. Далі наведено приклад методу 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 об’єкти рядка. Примітки

  1. Рядові методи використовують індекси на основі нуля, за винятком другого аргументу substring().
  2. Клас String є остаточним - його методи неможливо замінити.
  3. Коли JVM знаходить строковий літерал, він додається до пулу літеральних рядків.
  4. Клас рядків має ім'я методу length(), тоді як масиви мають довжину іменування атрибутів.
  5. У Java об'єкти рядка незмінні. Незмінний просто означає незмінний або незмінний. Після створення рядкового об’єкта його дані або стан не можна змінити, але створюється новий об’єкт рядка.

Довжина рядка

“Довжина” рядка - це лише кількість символів у ньому. Отже, «hi» - це довжина 2, а «Hello» - довжина 5. Метод length () у рядку повертає свою довжину, як ось:

String a = "Hello"; int len = a.length(); // len is 5

Інші методи порівняння, які також можна використовувати на рядку:

  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 since (a>b) System.out.println(c.compareTo(a)); // -1 since (c

Original text