Initialisering af streng i Java

1. Introduktion

Java Snor er en af ​​de vigtigste klasser, og vi har allerede dækket mange af dens aspekter i vores Snor-relateret række tutorials.

I denne vejledning fokuserer vi på Snor initialisering i Java.

2. Skabelse

Først og fremmest skal vi huske hvordan Snors oprettes i Java.

Vi kan bruge ny nøgleord eller den bogstavelige syntaks:

Streng ved hjælp af Ny = ny streng ("baeldung"); Streng ved hjælp af Literal = "baeldung";

Og det er også vigtigt, at vi forstår hvordan Snors styres i en specialiseret pool.

3. Snor Kun erklæring

Lad os først erklære en Snoruden at tildele en værdi eksplicit.

Vi kan enten gøre dette lokalt eller som en medlemsvariabel:

offentlig klasse StringInitialization {String fieldString; ugyldig printDeclaredOnlyString () {String localVarString; // System.out.println (localVarString); -> kompileringsfejl System.out.println (fieldString); }}

Som vi kan se, hvis vi prøver at bruge localVarString inden vi giver den en værdi, får vi en kompileringsfejl. På den anden side viser konsollen “nul" til fieldString'S værdi.

Se, medlemsvariabler initialiseres med en standardværdi når klassen er konstrueret, nul i SnorSagen. Men, vi er nødt til at initialisere lokale variabler selv.

Hvis vi giver localVarString en værdi af nul, vi ser, at de to faktisk er lige lige:

String localVarString = null; assertEquals (fieldString, localVarString);

4. Snor Initialisering ved hjælp af litteratur

Lad os nu oprette to Snors bruger den samme bogstavelige:

String literalOne = "Baeldung"; String literalTwo = "Baeldung";

Vi bekræfter, at der kun oprettes et objekt ved at sammenligne referencerne:

assertTrue (literalOne == literalTwo);

Årsagen til dette hænger tilbage med det faktum, at Snors opbevares i en pool. bogstaveligt Én tilføjer Snor "Baeldung" til poolen, og bogstaveligt to genbruger det.

5. Snor Initialisering ved hjælp af ny

Vi ser dog en anden adfærd, hvis vi bruger ny nøgleord.

String newStringOne = ny streng ("Baeldung"); String newStringTwo = ny streng ("Baeldung");

Selvom værdien af ​​begge Snors vil være det samme som tidligere, vi bliver nødt til forskellige objekter denne gang:

assertFalse (newStringOne == newStringTwo);

6. Tom Snors

Lad os nu oprette tre tomme Snors:

String emptyLiteral = ""; String emptyNewString = ny streng (""); String emptyNewStringTwo = ny streng ();

Som vi ved nu, det tomLiteral tilføjes til Snor pool, mens de to andre går direkte på bunken.

Selvom disse ikke vil være de samme objekter, har de alle den samme værdi:

assertFalse (emptyLiteral == emptyNewString) assertFalse (emptyLiteral == emptyNewStringTwo) assertFalse (emptyNewString == emptyNewStringTwo) assertEquals (emptyLiteral, emptyNewString); assertEquals (emptyNewString, emptyNewStringTwo);

7. nul Værdier

Lad os endelig se, hvordan null Snors opfører sig.

Lad os erklære og initialisere en null Snor:

String nullValue = null;

Hvis vi trykte nullVærdi, ville vi se ordet ”null”, som vi tidligere så. Og hvis vi forsøgte at påkalde nogen metoder til nullVærdi, vi får en NullPointerException, som forventet.

Men, hvorfor udskrives ”null”? Hvad er nul rent faktisk?

Nå, JVM-specifikationen siger det nul er standardværdien for alle referencer, så den er ikke specifikt bundet til Snor. Og faktisk kræver specifikationen ikke nogen konkret værdikodning for nul.

Så hvor kommer "null" fra til udskrivning a Snor derefter?

Hvis vi kigger på PrintStream #println implementering, vi ser det kalder String # valueOf:

public void println (Object x) {String s = String.valueOf (x); synkroniseret (dette) {print (s); ny linje(); }}

Og, hvis vi ser på String # valueOf, vi får vores svar:

public static String valueOf (Object obj) {return (obj == null)? "null": obj.toString (); }

Og det er selvfølgelig grunden til "null".

8. Konklusion

I denne artikel udforskede vi Snor initialisering. Vi forklarede forskellen mellem erklæring og initialisering. Vi berørte også brugen ny og ved hjælp af den bogstavelige syntaks.

Endelig kiggede vi på, hvad det betyder at tildele en nul værdi til en Snor, hvordan nul værdi er repræsenteret i hukommelsen, og hvordan den ser ud, når vi udskriver den.

Alle kodeeksempler, der bruges i artiklen, er tilgængelige på Github.