Струни в Java

Струни

Низовете са последователности от символи. В Java a Stringе Object. Низовете не трябва да се бъркат, charтъй като символите са буквално 1 стойност, а не последователност от символи. Все още можете да използвате 1 стойност в низ, но е за предпочитане да използвате, charкогато проверявате за 1 символ.

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

Изход:

true

Можете да създадете String Object по следните начини:

  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 литерали и константни String изрази се кешират по време на компилация. Компилаторът ги поставя в 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 String обекта. strи str2двете се отнасят до един и същ обект. str3има същото съдържание, но използването newпринуждава създаването на нов, различен обект.

Когато създавате Stral литерал, JVM вътрешно проверява това, което е известно като the 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); } }

Сравняване на струни

Ако искате да сравните стойността на две променливи String, не можете да използвате ==. Това се дължи на факта, че това ще сравнява препратките към променливите, а не стойностите, които са свързани с тях. За да сравните съхранените стойности на низовете, използвате метода е равно.

boolean equals(Object obj)

Връща true, ако два обекта са равни и false в противен случай.

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

Първото сравнение е невярно, защото “==” разглежда препратките и те не са еднакви.

Второто сравнение е вярно, защото променливите съхраняват същите стойности. В този случай “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. Низовите методи използват индекси, базирани на нула, с изключение на втория аргумент на substring().
  2. Класът String е окончателен - неговите методи не могат да бъдат заменени.
  3. Когато литералът String бъде намерен от JVM, той се добавя към пула литерални низове.
  4. String класът има име на метод length(), докато масивите имат дължина на наименование на атрибут.
  5. В java обектите с низове са неизменни. Неизменяемият просто означава немодифицируем или непроменим. След като низ обектът е създаден, неговите данни или състояние не могат да бъдат променени, но се създава нов обект низ.

Дължина на низа

„Дължината“ на низ е просто броят на символите в него. Така че "hi" е дължина 2, а "Hello" е дължина 5. Методът length () на низ връща дължината му, както следва:

String a = "Hello"; int len = a.length(); // len is 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 since (a>b) System.out.println(c.compareTo(a)); // -1 since (c

Original text