Inicializácia reťazca v Jave

1. Úvod

Java String je jednou z najdôležitejších tried a v našej sme sa už zaoberali mnohými jej aspektmi Stringsúvisiace série návodov.

V tejto príručke sa zameriame na String inicializácia v Jave.

2. Tvorba

Najskôr by sme si mali pamätať ako Stringsú vytvorené v prostredí Java.

Môžeme použiť Nový kľúčové slovo alebo doslovná syntax:

Reťazec usingNew = nový Reťazec ("baeldung"); Reťazec usingLiteral = "baeldung";

A je tiež dôležité, aby sme pochopili ako Stringsú spravované v špecializovanom združení.

3. String Iba vyhlásenie

Najskôr len vyhlásiť a String, bez výslovného priradenia hodnoty.

Môžeme to urobiť lokálne alebo ako členskú premennú:

verejná trieda StringInitialization {String fieldString; void printDeclaredOnlyString () {String localVarString; // System.out.println (localVarString); -> chyba kompilácie System.out.println (fieldString); }}

Ako vidíme, ak sa pokúsime použiť localVarString skôr ako mu dáme hodnotu, zobrazí sa nám chyba kompilácie. Na druhej strane konzola zobrazí „nulový" pre fieldStringHodnota.

Pozri, členské premenné sú inicializované s predvolenou hodnotou keď je trieda postavená, nulový v StringPrípad. Ale, lokálne premenné musíme inicializovať sami.

Ak dáme localVarString hodnota nulový, uvidíme, že obaja sú si teraz skutočne rovní:

Reťazec localVarString = null; assertEquals (fieldString, localVarString);

4. String Inicializácia pomocou literálov

Vytvorme teraz dve Stringpoužíva rovnaký literál:

Reťazec literalOne = "Baeldung"; Reťazec literalTwo = "Baeldung";

Porovnaním referencií potvrdíme, že je vytvorený iba jeden objekt:

assertTrue (literalOne == literalTwo);

Dôvod je uvedený v tom, že Stringsú uložené v bazéne. literalOne dodáva String „Baeldung“ k bazénu a doslovneDva znovu používa.

5. String Inicializácia pomocou Nový

Uvidíme však nejaké odlišné správanie, ak použijeme Nový kľúčové slovo.

String newStringOne = new String ("Baeldung"); String newStringTwo = new String ("Baeldung");

Aj keď hodnota oboch Strings bude rovnaká ako predtým, tentokrát budeme musieť použiť rôzne objekty:

assertFalse (newStringOne == newStringTwo);

6. Prázdne Strings

Vytvorme teraz tri prázdne Strings:

Reťazec emptyLiteral = ""; Reťazec emptyNewString = nový Reťazec (""); Reťazec emptyNewStringTwo = nový String ();

Ako už vieme, the emptyLiteral bude pridaný do String bazén, zatiaľ čo ďalšie dva idú priamo na haldu.

Aj keď to nebudú rovnaké objekty, všetky budú mať rovnakú hodnotu:

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

7. nulový Hodnoty

Na záver sa pozrime, aké nulové Stringchovať sa.

Vyhlásime a inicializujeme hodnotu null String:

Reťazec nullValue = null;

Keby sme tlačili nullValue, videli by sme slovo „null“, ako sme to videli predtým. A keby sme sa pokúsili vyvolať akékoľvek metódy, nullValue, dostali by sme NullPointerException, podľa očakávania.

Ale, prečo sa tlačí „null“? Čo je nulový vlastne?

No, hovorí to špecifikácia JVM nulový je predvolená hodnota pre všetky referencie, takže nie je špecificky viazaná na String. Špecifikácia vlastne nevyžaduje žiadne konkrétne kódovanie hodnoty nulový.

Odkiaľ teda pochádza „null“ pre tlač a String potom?

Ak sa pozrieme na PrintStream #println implementácia, uvidíme, že to bude volať Reťazec # valueOf:

public void println (Objekt x) {String s = String.valueOf (x); synchronized (this) {print (s); Nový riadok(); }}

A ak sa pozrieme na Reťazec # valueOf, dostaneme našu odpoveď:

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

A je zrejmé, že to je dôvod „nuly“.

8. Záver

V tomto článku sme to preskúmali String inicializácia. Vysvetlili sme rozdiel medzi deklaráciou a inicializáciou. Dotkli sme sa tiež používania Nový a použitie doslovnej syntaxe.

Nakoniec sme sa pozreli na to, čo to znamená priradiť a nulový hodnota do a String, ako nulový hodnota je reprezentovaná v pamäti a ako vyzerá, keď ju tlačíme.

Všetky ukážky kódov použité v článku sú k dispozícii na stránkach Github.


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