Šta je novo?

[Java] String primitivan il' jok

MostWanted

Cenjen
Učlanjen(a)
12.07.2013
Poruke
662
Poena
195
Moja oprema  
CPU & Cooler
Ryzen 5600 & BeQuiet Pure Rock Slim 2
Matična ploča
Asus B550-PRO
RAM
16GB DDR4 3200MHz Kingston
GPU
MSI Radeon 6700XT 12GB
Storage
1TB nvme SSD Kingston
Zvuk
Tannoy Gold 5
PSU
Fractal ION Gold 750W
Kućište
Cooler Master Silencio S600 + BeQuiet Silent Wings 3 120mm
Monitor
LG UltraGear 27'' 1440p 165Hz
Miš & tastatura
Logitech G Pro tastatura i mis
Kod:
Double a = new Double(1);
Double b = new Double(1);

a == b je FALSE, jer su 2 razlicita objekta u pitanju.

E sad, ako je String non-primitive, kao i Double, zasto onda

Kod:
String a = "a";
String b = "a";
a == b Vraca TRUE! Zar nisu razliciti objekti u pitanju?
 
Zato što su stringovi u JVM "interned", pa se string konstante mogu porediti sa == umesto equals
 
Zato što su to string literali. Reference a i b pokazuju na isti objekat u memoriji, tačnije string pool-u.

Kada kreiraš novi literal (u ovom slučaju String b koji ima istu vrednost), kompajler prvo proverava string pool. Ako postoji String koji ima istu vrednost (u ovom slučaju "a"), ne kreira se novi objekat. b pokazuje na isti objekat kao i a.

String možeš i ovako kreirati:

Kod:
String a = new String("a");

Samo što ovako kreirani objekat ne ide direktno u string pool. Možeš pomoću intern() metode da ga ubaciš u pool.

Kod:
String a = new String("a").intern();

Za poređenje sadržaja koristi equals() metodu.


Sent from my Redmi Note 4 using Tapatalk
 
Poslednja izmena:
To je to, hvala
 
Nazad
Vrh Dno