CharSequence vs String i Java

1. Introduktion

Kort fortalt, CharSequence og Snor er to forskellige grundlæggende begreber i Java.

I denne hurtige artikel vil vi se på forskellene mellem disse typer, og hvornår de skal bruges.

2. CharSequence

CharSequence er en grænseflade, der repræsenterer en sekvens af tegn. Mutabilitet håndhæves ikke af denne grænseflade. Derfor implementerer både ændrede og uforanderlige klasser denne grænseflade.

Selvfølgelig kan en grænseflade ikke instantieres direkte; det har brug for en implementering for at starte en variabel:

CharSequence charSequence = "baeldung";

Her, charSequence er instantieret med en Snor. Instantiering af andre implementeringer:

CharSequence charSequence = ny StringBuffer ("baeldung"); CharSequence charSequence = ny StringBuilder ("baeldung");

3. Snor

Snor er en række tegn i Java. Det er en uforanderlig klasse og en af ​​de hyppigst anvendte typer i Java. Denne klasse implementerer CharSequence, Serialiserbarog Sammenlignelig grænseflader.

Nedenfor opretter begge instantieringer Strenge med det samme indhold. De er dog ikke lige til hinanden:

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

4. CharSequence vs. Snor

Lad os sammenligne forskellene og fællesforholdene for CharSequence og Snor. De bor begge i den samme pakke, der hedder java.lang., men førstnævnte er en grænseflade, og sidstnævnte er en konkret klasse. Desuden er Snor klasse er uforanderlig.

I det følgende eksempel opretter hver sumoperation en anden forekomst, øger mængden af ​​lagrede data og returnerer den senest oprettede Snor:

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

På den anden side, StringBuilder opdaterer det allerede oprettede Snor for at holde den nye værdi:

@Test offentlig ugyldighed 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); }

En anden forskel er, at grænsefladen ikke indebærer en indbygget sammenligningsstrategi, mens Snor klasse implementerer Sammenlignelig interface.

At sammenligne to CharSequences, vi kan kaste dem til Snors derefter derefter sammenligne dem:

@Test offentlig ugyldighed givenIdenticalCharSequences_whenCastToString_thenEqual () {CharSequence charSeq1 = "baeldung_1"; CharSequence charSeq2 = "baeldung_2"; assertTrue (charSeq1.toString (). sammenlignTo (charSeq2.toString ())> 0); }

5. Konklusion

Vi bruger normalt Snor på de steder, hvor vi ikke er sikre på, hvad vi skal bruge til char-sekvenser. I nogle tilfælde StringBuilder og StringBuffer kan være mere passende.

Du kan finde flere oplysninger i JavaDocs om CharSequence og Snor.

Og som altid kan implementeringen af ​​alle disse eksempler og kodestykker findes på Github.