CharSequence vs. String a Java-ban

1. Bemutatkozás

Egyszerűen fogalmazva, CharSequence és Húr két különböző alapvető fogalom a Java-ban.

Ebben a rövid cikkben megvizsgáljuk az ezen típusok közötti különbségeket és az egyes típusok használatának idejét.

2. CharSequence

CharSequence egy interfész, amely karakterek sorozatát reprezentálja. A változtathatóságot ez az interfész nem érvényesíti. Ezért mind a mutábilis, mind a megváltoztathatatlan osztályok megvalósítják ezt az interfészt.

Természetesen egy interfész nem lehet közvetlenül példányos; megvalósításra van szüksége egy változó példányosításához:

CharSequence charSequence = "baeldung";

Itt, charSequence példányosítja a Húr. Más megvalósítások kezdeményezése:

CharSequence charSequence = új StringBuffer ("baeldung"); CharSequence charSequence = új StringBuilder ("baeldung");

3. Húr

Húr egy karaktersorozat a Java-ban. Ez egy változhatatlan osztály és a Java egyik leggyakrabban használt típusa. Ez az osztály hajtja végre a CharSequence, Sorosítható, és Hasonló interfészek.

Mindkét példány alatt létrejön Húrok azonos tartalommal. Azonban nem egyenlőek egymással:

@Test public void givenUsingString_whenInstantiatingString_thenWrong () {CharSequence firstString = "baeldung"; String secondString = "baeldung"; assertNotEquals (firstString, secondString); }

4. CharSequence vs. Húr

Hasonlítsuk össze a CharSequence és Húr. Mindkettő ugyanabban a megnevezett csomagban lakik java.lang., de az előbbi egy interfész, utóbbi pedig egy konkrét osztály. Sőt, a Húr osztály változhatatlan.

A következő példában minden összegző művelet létrehoz egy másik példányt, növeli a tárolt adatok mennyiségét és visszaadja a legutóbb létrehozottakat Húr:

@Test public void givenString_whenAppended_thenUnmodified () {String test = "a"; int firstAddressOfTest = System.identityHashCode (teszt); teszt + = "b"; int secondAddressOfTest = System.identityHashCode (teszt); assertNotEquals (firstAddressOfTest, secondAddressOfTest); }

Másrészről, StringBuilder frissíti a már létrehozottat Húr az új érték megtartása:

@Test public void givenStringBuilder_whenAppended_thenModified () {StringBuilder teszt = new StringBuilder (); teszt.append ("a"); int firstAddressOfTest = System.identityHashCode (teszt); teszt.append ("b"); int secondAddressOfTest = System.identityHashCode (teszt); assertEquals (firstAddressOfTest, secondAddressOfTest); }

Egy másik különbség az, hogy az interfész nem jelent beépített összehasonlítási stratégiát, míg a Húr osztály hajtja végre a Hasonló felület.

Kettőt összehasonlítani CharSequences, rádobhatjuk őket Húrs ezt követően hasonlítsa össze őket:

@Test public void givenIdenticalCharSequences_whenCastToString_thenEqual () {CharSequence charSeq1 = "baeldung_1"; CharSequence charSeq2 = "baeldung_2"; assertTrue (charSeq1.toString (). CompareTo (charSeq2.toString ())> 0); }

5. Következtetés

Általában használjuk Húr azokon a helyeken, ahol nem vagyunk biztosak abban, hogy mit használjunk a char-szekvenciákhoz. Bizonyos esetekben azonban StringBuilder és StringBuffer megfelelőbb lehet.

További információt a JavaDocs-ban találhat CharSequence és Húr.

És mint mindig, ezeknek a példáknak és kódrészleteknek a megvalósítása megtalálható a Githubon.