CharSequence vs. String v Jave
1. Úvod
Jednoducho povedané, CharSequence a String sú dva rôzne základné pojmy v Jave.
V tomto rýchlom článku sa pozrieme na rozdiely medzi týmito typmi a na to, kedy ich používať.
2. CharSequence
CharSequence je rozhranie, ktoré predstavuje postupnosť znakov. Toto rozhranie nevynucuje premenlivosť. Preto toto rozhranie implementujú premenlivé aj nemenné triedy.
Rozhranie samozrejme nemožno vytvoriť priamo; potrebuje implementáciu na vytvorenie inštancie premennej:
CharSequence charSequence = "baeldung";
Tu, charSequence je inštancovaný s String. Vytvorenie inštancie ďalších implementácií:
CharSequence charSequence = new StringBuffer ("baeldung"); CharSequence charSequence = new StringBuilder ("baeldung");
3. String
String je postupnosť znakov v jazyku Java. Je to nemenná trieda a jeden z najčastejšie používaných typov v Jave. Táto trieda implementuje CharSequence, Serializovateľnéa Porovnateľné rozhrania.
Pod obidvomi inštanciami sa vytvoria Struny s rovnakým obsahom. Nie sú si však navzájom rovné:
@Test public void givenUsingString_whenInstantiatingString_thenWrong () {CharSequence firstString = "baeldung"; Reťazec secondString = "baeldung"; assertNotEquals (firstString, secondString); }
4. CharSequence vs. String
Porovnajme rozdiely a spoločné črty CharSequence a String. Obaja sa nachádzajú v rovnakom balíku s názvom java.lang., ale prvé je rozhranie a druhé predstavuje konkrétnu triedu. Okrem toho String trieda je nemenná.
V nasledujúcom príklade každá operácia súčtu vytvorí inú inštanciu, zvýši množstvo uložených údajov a vráti naposledy vytvorené Reťazec:
@Test public void givenString_whenAppended_thenUnmodified () {test reťazcov = "a"; int firstAddressOfTest = System.identityHashCode (test); test + = "b"; int secondAddressOfTest = System.identityHashCode (test); assertNotEquals (firstAddressOfTest, secondAddressOfTest); }
Na druhej strane, StringBuilder aktualizuje už vytvorené String zachovať novú hodnotu:
@Test public void givenStringBuilder_whenAppended_thenModified () {test StringBuilder = nový StringBuilder (); test.append ("a"); int firstAddressOfTest = System.identityHashCode (test); test.append ("b"); int secondAddressOfTest = System.identityHashCode (test); assertEquals (firstAddressOfTest, secondAddressOfTest); }
Ďalším rozdielom je, že rozhranie neznamená zabudovanú porovnávaciu stratégiu, zatiaľ čo String trieda implementuje Porovnateľné rozhranie.
Pre porovnanie dva CharSequences, môžeme ich obsadiť do Strings je následne porovnať:
@Test public void givenIdenticalCharSequences_whenCastToString_thenEqual () {CharSequence charSeq1 = "baeldung_1"; CharSequence charSeq2 = "baeldung_2"; assertTrue (charSeq1.toString (). compareTo (charSeq2.toString ())> 0); }
5. Záver
Zvyčajne používame String na miestach, kde si nie sme istí, čo použiť na sekvencie znakov. V niektorých prípadoch však StringBuilder a StringBuffer môže byť vhodnejšia.
Viac informácií nájdete v JavaDocs o CharSequence a String.
A ako vždy, implementáciu všetkých týchto príkladov a útržkov kódu nájdete na serveri Github.