Inicijalizacija niza u Javi

1. Uvod

Java Niz je jedna od najvažnijih klasa i već smo pokrili puno njezinih aspekata Niz-vezana serija tutorijala.

U ovom uputstvu usredotočit ćemo se na Niz inicijalizacija u Javi.

2. Stvaranje

Prije svega, trebali bismo se sjetiti kako Nizstvoreni su na Javi.

Možemo koristiti novi ključna riječ ili doslovna sintaksa:

String usingNew = new String ("baeldung"); String usingLiteral = "baeldung";

I, također je važno da razumijemo kako Niznjima se upravlja u specijaliziranom bazenu.

3. Niz Samo izjava

Prvo, samo da izjaviti a Niz, bez eksplicitnog dodjeljivanja vrijednosti.

To možemo učiniti lokalno ili kao varijabla člana:

javna klasa StringInitialization {String fieldString; void printDeclaredOnlyString () {String localVarString; // System.out.println (localVarString); -> pogreška kompilacije System.out.println (fieldString); }}

Kao što vidimo, ako pokušamo koristiti localVarString prije nego što mu damo vrijednost, dobit ćemo pogrešku u kompilaciji. S druge strane, konzola će pokazati "null " za fieldString‘S vrijednost.

Vidjeti, varijable člana inicijaliziraju se sa zadanom vrijednošću kada je klasa konstruirana, null u NizSlučaj. Ali, moramo sami inicijalizirati lokalne varijable.

Ako damo localVarString vrijednost od null, vidjet ćemo da su to dvoje, zaista, sada jednaki:

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

4. Niz Inicijalizacija korištenjem literala

Stvorimo sada dvije Nizs koristi isti literal:

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

Usporedbom referenci potvrdit ćemo da je stvoren samo jedan objekt:

assertTrue (literalOne == literalTwo);

Razlog tome vraća se na činjenicu da Nizsu pohranjene u bazenu. literalOne dodaje Niz "Baeldung" do bazena, i doslovnoDva ponovno ga upotrebljava.

5. Niz Korištenje inicijalizacije novi

Vidjet ćemo ipak neko drugačije ponašanje ako upotrijebimo novi ključna riječ.

String newStringOne = novi niz ("Baeldung"); String newStringTwo = novi niz ("Baeldung");

Iako vrijednost oba Nizs bit će isti kao i ranije, ovaj put ćemo morati na različite objekte:

assertFalse (newStringOne == newStringTwo);

6. Prazno Nizs

Stvorimo sada tri prazna Nizs:

Niz prazanLiteral = ""; String emptyNewString = novi niz (""); String emptyNewStringTwo = novi String ();

Kao što do sada znamo, the praznoLiteralno bit će dodan u Niz bazen, dok druga dva idu izravno na hrpu.

Iako to neće biti isti objekti, svi će oni imati istu vrijednost:

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

7. null Vrijednosti

Napokon, da vidimo koliko je ništavno Nizs ponašati se.

Proglasimo i inicijaliziramo nulu Niz:

Niz nullValue = null;

Kad bismo tiskali nullValue, vidjeli bismo riječ "null", kao što smo ranije vidjeli. I, ako bismo se pokušali pozvati na bilo kakve metode nullValue, dobili bismo NullPointerException, kako se očekivalo.

Ali, zašto se ispisuje "null"? Što je null zapravo?

Pa, JVM specifikacija to kaže null je zadana vrijednost za sve reference, tako da nije posebno vezan za Niz. I zapravo, specifikacija ne nalaže nikakvo konkretno kodiranje vrijednosti za null.

Dakle, odakle dolazi "null" za ispis a Niz zatim?

Ako bacimo pogled na PrintStream #println implementacija, vidjet ćemo da će to biti potrebno Niz # vrijednostOf:

javna praznina println (objekt x) {String s = String.valueOf (x); sinkronizirano (ovo) {ispis (i); nova linija(); }}

I, ako pogledamo Niz # valueOf, dobivamo svoj odgovor:

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

I, očito, to je razlog za "null".

8. Zaključak

U ovom smo članku istražili Niz inicijalizacija. Objasnili smo razliku između deklaracije i inicijalizacije. Dotaknuli smo se i korištenja novi i koristeći doslovnu sintaksu.

Na kraju smo pogledali što znači dodijeliti null vrijednost prema a Niz, kako null Vrijednost je predstavljena u memoriji i kako izgleda kad je ispisujemo.

Svi uzorci koda korišteni u članku dostupni su na Githubu.


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