Sobes.tech
Junior
163

Care este diferența dintre crearea unui șir folosind new String() și utilizarea unui literal de șir?

Răspuns de la AI

sobes.tech AI

Atunci când se utilizează literalul de șir ("abc"), șirul este creat în Pool-ul de șiruri (String Pool). Dacă deja există în pool un șir cu aceeași valoare, se returnează o referință la obiectul existent. Aceasta este o optimizare pentru economisirea memoriei.

Prin utilizarea new String("abc"), întotdeauna se creează un nou obiect de tip șir în heap, chiar dacă în pool există deja un șir cu aceeași valoare.

Exemplu:

// Se creează un literal de șir "hello". Dacă nu există în pool, este adăugat.
// str1 face referire la obiectul din pool.
String str1 = "hello";

// Se reutilizează literalul "hello". Deoarece deja este în pool,
// str2 face, de asemenea, referire la același obiect din pool ca și str1.
String str2 = "hello";

// Se creează un nou obiect de șir cu valoarea "hello" în heap.
// str3 face referire la acest nou obiect în heap, nu la cel din pool.
String str3 = new String("hello");

// Verificarea referințelor:
// str1 și str2 fac referire la același obiect în pool.
System.out.println(str1 == str2); // true

// str1 face referire la obiectul din pool, str3 la noul obiect din heap.
System.out.println(str1 == str3); // false

// Verificarea valorii:
// Toate șirurile au aceeași valoare.
System.out.println(str1.equals(str3)); // true

Diferențe în tabel:

Criteriu Literal de șir ("abc") new String("abc")
Locul de creare Pool de șiruri (String Pool) Heap (Heap)
Crearea obiectului Returnează un obiect existent sau creează unul nou Crează întotdeauna un obiect nou
Optimizarea memoriei Utilizează eficient pool-ul pentru repetiții Poate crea duplicate, mai puțin eficient
Compararea referințelor (==) Adesea true pentru șirurile cu aceeași valoare Întotdeauna false pentru șirurile cu aceeași valoare create separat