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.