CharSequence vs String i Java

1. Introduksjon

For å si det enkelt, CharSequence og String er to forskjellige grunnleggende konsepter i Java.

I denne raske artikkelen skal vi se på forskjellene mellom disse typene og når de skal brukes.

2. CharSequence

CharSequence er et grensesnitt som representerer en sekvens av tegn. Mutabilitet håndheves ikke av dette grensesnittet. Derfor implementerer både foranderlige og uforanderlige klasser dette grensesnittet.

Selvfølgelig kan et grensesnitt ikke instantieres direkte; det trenger en implementering for å sette i gang en variabel:

CharSequence charSequence = "baeldung";

Her, charSequence er instantiert med en String. Instansere andre implementeringer:

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

3. String

String er en sekvens av tegn i Java. Det er en uforanderlig klasse og en av de mest brukte typene i Java. Denne klassen implementerer CharSequence, Serialiserbar, og Sammenlignelig grensesnitt.

Nedenfor skaper begge instantiations Strenger med samme innhold. Imidlertid er de ikke like hverandre:

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

4. CharSequence vs. String

La oss sammenligne forskjellene og fellestrekkene til CharSequence og String. De bor begge i samme pakke som heter java.lang., men førstnevnte er et grensesnitt og sistnevnte er en konkret klasse. Videre, den String klasse er uforanderlig.

I det følgende eksemplet oppretter hver sumoperasjon en annen forekomst, øker datamengden som er lagret og returnerer den sist opprettet Streng:

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

På den andre siden, StringBuilder oppdaterer allerede opprettet String for å holde den nye verdien:

@Test offentlig ugyldig 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 annen forskjell er at grensesnittet ikke innebærer en innebygd sammenligningsstrategi, mens String klasse implementerer Sammenlignelig grensesnitt.

Å sammenligne to CharSequences, vi kan kaste dem til Strings deretter sammenligne dem:

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

5. Konklusjon

Vi bruker vanligvis String på stedene der vi ikke er sikre på hva vi skal bruke til røyesekvenser. I noen tilfeller StringBuilder og StringBuffer kan være mer passende.

Du kan finne mer informasjon i JavaDocs om CharSequence og String.

Og som alltid kan implementeringen av alle disse eksemplene og kodebiter finnes på Github.


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