CharSequence vs. String u Javi
1. Uvod
Jednostavno rečeno, CharSequence i Niz su dva različita temeljna pojma u Javi.
U ovom ćemo kratkom članku pogledati razlike između ovih vrsta i kada ih koristiti.
2. CharSequence
CharSequence je sučelje koje predstavlja slijed znakova. Ovo sučelje ne provodi promjenjivost. Stoga i izmjenjive i nepromjenjive klase implementiraju ovo sučelje.
Naravno, sučelje se ne može izravno instalirati; potrebna je implementacija za instanciranje varijable:
CharSequence charSequence = "baeldung";
Ovdje, charSequence instancirano je s Niz. Instanciranje ostalih implementacija:
CharSequence charSequence = novi StringBuffer ("baeldung"); CharSequence charSequence = novi StringBuilder ("baeldung");
3. Niz
Niz slijed je znakova u Javi. To je nepromjenjiva klasa i jedna od najčešće korištenih vrsta u Javi. Ova klasa provodi CharSequence, Serijalizirati, i Usporedive sučelja.
Ispod obje instancije stvorite Žice s istim sadržajem. Međutim, međusobno nisu jednaki:
@Test javna praznina givenUsingString_whenInstantiatingString_thenWrong () {CharSequence firstString = "baeldung"; Niz secondString = "baeldung"; assertNotEquals (firstString, secondString); }
4. CharSequence nasuprot Niz
Usporedimo razlike i zajedničke karakteristike CharSequence i Niz. Oboje borave u istom paketu imena java.lang., ali prvo je sučelje, a drugo konkretna klasa. Štoviše, Niz razred je nepromjenjiv.
U sljedećem primjeru svaka operacija zbrajanja stvara drugu instancu, povećava količinu pohranjenih podataka i vraća najnoviji stvoreni Niz:
@Test javna praznina givenString_whenAppended_thenUnmodified () {String test = "a"; int firstAddressOfTest = System.identityHashCode (test); test + = "b"; int secondAddressOfTest = System.identityHashCode (test); assertNotEquals (firstAddressOfTest, secondAddressOfTest); }
S druge strane, StringBuilder ažurira već stvoreno Niz da zadrži novu vrijednost:
@Test javna praznina givenStringBuilder_whenAppended_thenModified () {StringBuilder test = new StringBuilder (); test.append ("a"); int firstAddressOfTest = System.identityHashCode (test); test.append ("b"); int secondAddressOfTest = System.identityHashCode (test); assertEquals (firstAddressOfTest, secondAddressOfTest); }
Druga je razlika u tome što sučelje ne podrazumijeva ugrađenu strategiju usporedbe, dok Niz razred provodi Usporedive sučelje.
Za usporedbu dva CharSequences, možemo ih baciti na Niza zatim ih naknadno usporedite:
@Test javna praznina givenIdenticalCharSequences_whenCastToString_thenEqual () {CharSequence charSeq1 = "baeldung_1"; CharSequence charSeq2 = "baeldung_2"; assertTrue (charSeq1.toString (). compareTo (charSeq2.toString ())> 0); }
5. Zaključak
Obično koristimo Niz na mjestima na kojima nismo sigurni što bismo koristili za sljedove char. Međutim, u nekim slučajevima, StringBuilder i StringBuffer može biti prikladniji.
U JavaDocs možete pronaći više informacija o CharSequence i Niz.
I, kao i uvijek, implementacija svih ovih primjera i isječaka koda može se naći na Githubu.