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.