Siruri de caractere

Corzile sunt secvențe de personaje. În Java, a String este un Object. Corzile nu trebuie confundate cu char deoarece caracterele sunt literalmente o valoare mai degrabă decât o secvență de caractere. Puteți folosi în continuare 1 valoare într-un șir, cu toate acestea este preferabil să se utilizeze char când verificați 1 caracter.

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

Ieșire:

true

Puteți crea un obiect șir în următoarele moduri:

  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

S-ar putea să vă gândiți: Care este diferența dintre cele trei?

Ei bine, folosind new cuvânt cheie garantează că un nou String obiectul va fi creat și o nouă locație de memorie va fi alocată în Heap memorie (Apasa aici pentru a afla mai multe). Literalele șirului și expresiile constante ale șirului sunt stocate în cache la momentul compilării. Compilatorul le introduce în String Literal Pool pentru a preveni duplicatele și pentru a îmbunătăți consumul de memorie. Alocarea obiectelor este costisitoare și acest truc mărește performanța în timp ce instanțează șirurile. Dacă utilizați din nou același literal, JVM utilizează același obiect. Utilizarea controlorului ca mai sus este aproape întotdeauna o alegere mai proastă.

În acest fragment de cod, câte obiecte șir sunt create?

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

Răspunsul este: Se creează 2 obiecte șir. str și str2 ambele se referă la același obiect. str3 are același conținut, dar folosind new a forțat crearea unui obiect nou, distinct.

Când creați un literal String, JVM verifică intern ceea ce este cunoscut sub numele de String pool, pentru a vedea dacă poate găsi un obiect de tip șir similar (înțelept din punct de vedere al conținutului). Dacă îl găsește, returnează aceeași referință. În caz contrar, continuă și creează un nou obiect String în pool, astfel încât aceeași verificare să poată fi efectuată în viitor.

Puteți testa acest lucru folosind compararea rapidă a obiectelor == și implementat 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'

Iată un alt exemplu despre cum să creați un șir în Java folosind diferite metode:

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);  
   }
}

Compararea șirurilor

Dacă doriți să comparați valoarea a două variabile Șir, nu puteți utiliza ==. Acest lucru se datorează faptului că acest lucru va compara referințele variabilelor și nu valorile care sunt legate de acestea. Pentru a compara valorile stocate ale șirurilor utilizați metoda este egală.

boolean equals(Object obj)

Revine adevărat dacă două obiecte sunt egale și false în caz contrar.

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

Prima comparație este falsă deoarece ”==” privește referințele și nu sunt la fel.

A doua comparație este adevărată deoarece variabilele stochează aceleași valori. În acest caz „Hello world”.

Avem mai multe metode încorporate în șir. Următorul este un exemplu al metodei 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 );
   }
}

Acest lucru va avea ca rezultat – String Length is : 17

Răspunsul este: 2 Sunt create obiecte șir. Note

  1. Metodele șirului folosesc indexuri bazate pe zero, cu excepția celui de-al doilea argument al substring().
  2. Clasa String este finală – metodele sale nu pot fi anulate.
  3. Când literalul String este găsit de JVM, acesta este adăugat la pool-ul literal string.
  4. Clasa de șiruri are un nume de metodă length(), în timp ce matricile au o lungime de denumire a atributelor.
  5. În java, obiectele șir sunt imuabile. Imuabil înseamnă pur și simplu nemodificabil sau neschimbat. Odată ce obiectul șir este creat, datele sau starea acestuia nu pot fi modificate, dar este creat un nou obiect șir.

Lungimea șirului

„Lungimea” unui șir este doar numărul de caractere din el. Deci „hi” are lungimea 2 și „Hello” este lungimea 5. Metoda length () pe un șir returnează lungimea acestuia, astfel:

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

Alte metode de comparație care pot fi, de asemenea, utilizate pe șir sunt:

  1. equalsIgnoreCase (): – compară șirul fără a lua în considerare sensibilitatea la majuscule.
String a = "HELLO";
String b = "hello";
System.out.println(a.equalsIgnoreCase(b));   // It will print true
  1. compareTo: – compară valoarea lexicografic și returnează un număr întreg.
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<a)