„Autor, video sam u jednom članku na tvom javnom nalogu da je ArrayList interno implementiran pomoću nizova, pa sam postao veoma zainteresovan za nizove i želim da ih detaljno upoznam. Konačno smo stigli do te teme, jedva čekam!“ rekla je Sanmej uzbuđeno.
„Autor, danas ćemo ukratko proći kroz dvodimenzionalne nizove, prilično su jednostavni.“ rekla mi je Sanmej spustivši telefon.
„Dobro, prvobitno nisam nameravao da ih predajem jer se u praksi ne koriste često i prilično su jednostavni — samo prelazak sa jednodimenzionalnog na dvodimenzionalni niz, nema mnogo toga za reći, pa hajde da ukratko porazgovaramo.“ ugasio sam cigaretu u ruci, dugo izdahnuo dim koji je prošao iznad Sanmej glave i izazvao blagi kašalj (😂)
„Brate, ranije sam od tebe čula da je i niz objekat, ali u Javi takva klasa nije eksplicitno definisana.“ Izgleda da Sanmej pažljivo uči.
„Tačno je, zato nizovi nemaju priliku da prevaziđu metod Object.toString(). Ako pokušate da direktno isprintate niz, rezultat koji dobijete nije ono što očekujete.“ nastavio sam na njene reči.
"Brate, prethodni članak o detaljnom razumevanju String.intern() je pomenuo StringBuilder, hajde da o njima porazgovaramo u ovom odeljku!"
Razlika između StringBuffer i StringBuilder
Pošto su stringovi nepromenljivi, kada naiđemo na nadovezivanje stringova (naročito kada koristimo operator +), moramo razmotriti pitanje performansi. Ne možete bezbrižno stvarati previše String objekata i tako stvarati nepotreban pritisak na dragocenu memoriju.
Pre nego što sam završio rečenicu, svečana pesma sa Qingdao osnovne škole doprla je do mojih ušiju, "pe ~ vaj ~ mo ~", i ja sam gotovo nesvesno počeo da pevušim.
Koliko objekata kreira new String("Autor")
"Hajde da krenemo od ove interview teme!"
String s = new String("Autor");
"Autor, kako da uporedim dva stringa na jednakost?" upitala je
"To pitanje deluje jednostavno, a na Stack Overflow-u ima preko 3,7 miliona pregleda," rekao sam. "Ovo pitanje se takođe može svesti na: koja je razlika između metode .equals() i operatora '=='."
- Operator "==" služi za proveru da li su adrese dva objekta jednake.
- Metoda
.equals()služi za proveru da li je sadržaj dva objekta jednak.
String je verovatno najčešće korišćeni referentni tip u Javi, pa su dizajneri klase String očigledno uložili mnogo truda u nju.
Uzmimo za primer nepromenljivost (imutabilnost) Stringa.
- Klasa String je modifikovana ključnom rečju final, tako da nema potklase, što znači da nijedna potklasa ne može da prepiše njene metode i promeni njeno ponašanje.
- Podaci klase String se čuvaju u nizu
char[], a taj niz je takođe modifikovan ključnom rečju final, što znači da String objekat ne može da se izmeni — jednom kada se inicijalizuje, vrednost je fiksna.
Pretpostavimo da ste pročitali onaj članak koji tehnički tim Meituana detaljno analizira String.intern(), ali vam on i dalje nije jasan.
To je vrhunski članak — temeljan, a pristupačan, pravi vrhunac među člancima. Posle njega bi trebalo da vam intern metod klase String bude potpuno jasan. Ali hajde da ga ipak detaljno objasnimo.
"Autor, u 'Java razvojnom priručniku' koji si mi dao da pročitam piše sledeće: u telu petlje, za spajanje stringova je najbolje koristiti StringBuilder-ov append() metod, a ne operator +. Zašto je to tako?" pitala je Sanmej zbunjeno.
Može se pomisliti: „Razdvajanje stringova nema šta da se objašnjava — zašto prosto ne bismo upotrebili metod split() klase String!"
"Ako zaista tako misliš, pazi, stvari su daleko od toliko jednostavnih." rekoh sa osmehom.
Zamislimo sada ovakav niz karaktera "Marko Marković, jedan zabavan programer", koji treba razdvojiti po zarezu, što znači da je prvi deo niza "Marko Marković" ispred zareza, a drugi deo niza "jedan zabavan programer" iza zareza.
