String inicializálás Java-ban

1. Bemutatkozás

Jáva Húr az egyik legfontosabb osztály, és sok szempontját már lefedtük Húrkapcsolódó oktatósorozatok.

Ebben az oktatóanyagban a következőkre fogunk összpontosítani Húr inicializálás Java-ban.

2. Teremtés

Először is emlékeznünk kell arra, hogyan Húrs Java-ban jönnek létre.

Használhatjuk a új kulcsszó vagy a szó szerinti szintaxis:

String usingNew = új karakterlánc ("baeldung"); Karakterlánc aLiteral = "baeldung" használatával;

És az is fontos, hogy megértsük, hogyan HúrEzeket egy speciális medencében kezelik.

3. Húr Csak nyilatkozat

Először csak kijelentik a Húr, anélkül, hogy kifejezetten értéket rendelne hozzá.

Vagy lokálisan, vagy tagváltozóként tehetjük meg:

nyilvános osztály StringInitialization {String fieldString; void printDeclaredOnlyString () {String localVarString; // System.out.println (localVarString); -> fordítási hiba System.out.println (fieldString); }}

Mint láthatjuk, ha megpróbáljuk használni localVarString mielőtt értéket adna neki, fordítási hibát kapunk. Másrészt a konzolon megjelenik anulla" mert fieldString’S értéke.

Lát, tagváltozók inicializálása alapértelmezett értékkel történik amikor az osztály felépül, nulla ban ben HúrEsete. De, magunknak kell inicializálnunk a lokális változókat.

Ha adunk localVarString értéke nulla, látni fogjuk, hogy a kettő valóban egyenlő:

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

4. Húr Inicializálás a literálok segítségével

Hozzunk létre most kettőt Húrs ugyanazt a szó szerinti szót használja:

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

A referenciák összehasonlításával megerősítjük, hogy csak egy objektum jön létre.

assertTrue (literalOne == literalTwo);

Ennek oka visszatért arra a tényre, hogy Húrs egy medencében tárolják. literalOne hozzáteszi a Húr „Baeldung” a medencéhez, és literalTwo újrafelhasználja.

5. Húr Inicializálás használatával új

Láthatunk azonban más viselkedést, ha a új kulcsszó.

String newStringOne = új karakterlánc ("Baeldung"); String newStringTwo = új karakterlánc ("Baeldung");

Bár mindkettő értéke Húrs ugyanaz lesz, mint korábban, ezúttal különböző objektumokat kell használnunk:

assertFalse (newStringOne == newStringTwo);

6. Üres Húrs

Hozzunk létre most három üreset Húrs:

String emptyLiteral = ""; String emptyNewString = új karakterlánc (""); String emptyNewStringTwo = új karakterlánc ();

Amint tudjuk, a emptyLiteral hozzáadódik a Húr medence, míg a másik kettő közvetlenül a kupacra megy.

Bár ezek nem ugyanazok az objektumok, mindegyiknek ugyanaz lesz az értéke:

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

7. nulla Értékek

Végül lássuk, mennyire semmis Húrs viselkednek.

Nyilatkozjuk és inicializáljuk a nullát Húr:

String nullValue = null;

Ha kinyomtattuk nullValue, látnánk a „null” szót, amint azt korábban láttuk. És ha bármilyen módszert megpróbáltunk meghívni nullValue, kapnánk egy NullPointerException, a várakozásoknak megfelelően.

De, miért nyomtatják a „null” -t? Mi a nulla tulajdonképpen?

Nos, a JVM specifikáció ezt mondja nulla az összes hivatkozás alapértelmezett értéke, ezért nincs kifejezetten a Húr. És valójában a specifikáció nem ír elő konkrét értékkódolást nulla.

Tehát, honnan származik a „null” a nyomtatáshoz a Húr azután?

Ha egy pillantást vetünk a PrintStream #println megvalósítás, látni fogjuk, hogy hív String # valueOf:

public void println (Objektum x) {String s = String.valueOf (x); szinkronizált (ez) {nyomtatás (ok); új sor(); }}

És, ha megnézzük String # valueOf, megkapjuk a választ:

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

És nyilvánvalóan ez az oka a „nullának”.

8. Következtetés

Ebben a cikkben feltártuk Húr inicializálás. Megmagyaráztuk a különbséget a deklarálás és az inicializálás között. Kitértünk a használatra is új és a szó szerinti szintaxist használva.

Végül megvizsgáltuk, mit jelent a nulla érték a Húr, hogy a nulla érték megjelenik a memóriában, és hogyan néz ki, amikor kinyomtatjuk.

A cikkben használt összes kódminta elérhető a Github oldalon.