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.