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.


$config[zx-auto] not found$config[zx-overlay] not found