logo

Nizi v Javi

V danem primeru bo ustvarjen samo en objekt. Prvič, JVM v naboru konstant nizov ne bo našel nobenega objekta niza z vrednostjo Dobrodošli, zato bo ustvaril nov objekt. Po tem bo v bazenu našel niz z vrednostjo Dobrodošli, ne bo ustvaril novega predmeta, ampak bo vrnil referenco na isto instanco. V tem članku bomo spoznali nize Java.

Kaj so nizi v Javi?

Nizi so vrsta objektov, ki lahko shranjujejo znak vrednosti in v Javi je vsak znak shranjen v 16 bitih, tj. z uporabo 16-bitnega kodiranja UTF. Niz deluje enako kot niz znakov v Javi.



primer:

String name = 'Geeks';>
Primer niza v Javi

Primer niza v Javi

Spodaj je primer niza v Javi:



Java
// Java Program to demonstrate // String public class StringExample {  // Main Function  public static void main(String args[])  {  String str = new String('example');  // creating Java string by new keyword  // this statement create two object i.e  // first the object is created in heap  // memory area and second the object is  // created in String constant pool.  System.out.println(str);  } }>

Izhod
example>

Načini ustvarjanja niza

Obstajata dva načina za ustvarjanje niza v Javi:

  • String Literal
  • Uporaba nove ključne besede

Sintaksa:

 = '';>

1. Nizovni literal

Da bo Java bolj učinkovita pri pomnilniku (ker se ne ustvarijo novi objekti, če že obstajajo v nizu stalnih nizov).



primer:

String demoString = techcodeview.com;>

2. Uporaba nove ključne besede

  • Niz s = nov niz (dobrodošli);
  • V takem primeru bo JVM ustvaril nov predmet niza v običajnem (brez bazena) pomnilniku kopice in dobesedna dobrodošlica bo postavljena v bazen konstant nizov. Spremenljivka s se bo nanašala na objekt v kopici (brez bazena)

primer:

listnode
String demoString = new String (techcodeview.com);>

Vmesniki in razredi v nizih v Javi

CharBuffer : Ta razred implementira vmesnik CharSequence. Ta razred se uporablja za omogočanje uporabe medpomnilnikov znakov namesto CharSequences. Primer takšne uporabe je paket regularnih izrazov java.util.regex.

Vrvica : Je zaporedje znakov. V Javi so objekti niza nespremenljivi, kar pomeni konstanto in jih ni mogoče spremeniti, ko so ustvarjeni.

Vmesnik CharSequence

Vmesnik CharSequence se uporablja za predstavitev zaporedja znakov v Javi.
Razredi, ki so implementirani z uporabo vmesnika CharSequence, so omenjeni spodaj in zagotavljajo veliko funkcionalnosti, kot so podniz, lastoccurence, prvi pojav, concatenate, toupper, tolower itd.

  1. Vrvica
  2. StringBuffer
  3. StringBuilder

1. Vrvica

Niz je nespremenljiv razred, ki pomeni konstanto in ga ni mogoče spremeniti, ko je enkrat ustvarjen, in če želimo spremeniti, moramo ustvariti nov predmet in celo funkcionalnost, ki jo ponuja, kot so toupper, tolower itd. Vse te vrnejo nov objekt, ki se ne spreminja. izvirni predmet. Samodejno je nit varen.

Sintaksa

String str= 'geeks';  or String str= new String('geeks')>

2. StringBuffer

StringBuffer je razred vrstnikov Vrvica , je spremenljive narave in je nitno varen razred, lahko ga uporabimo, ko imamo večnitno okolje in skupni objekt vmesnega pomnilnika nizov, tj. uporablja ga več niti. Ker je varen za niti, so dodatni stroški, zato se uporablja predvsem za večnitne programe.

Sintaksa:

StringBuffer demoString = new StringBuffer('techcodeview.com');>

3. Graditelj nizov

StringBuilder v Javi predstavlja alternativo nizu in razredu StringBuffer, saj ustvari spremenljivo zaporedje znakov in ni varno za niti. Uporablja se samo znotraj niti, tako da ni dodatnih stroškov, zato se uporablja predvsem za programe z eno nitjo.

Sintaksa:

StringBuilder demoString = new StringBuilder(); demoString.append('GFG');>

StringTokenizer

StringTokenizer razred v Javi se uporablja za razdelitev niza na žetone.

primer:

Tokenizer nizov v Javi

Objekt StringTokenizer interno ohranja trenutni položaj znotraj niza, ki ga je treba označiti z žetonom. Nekatere operacije pomaknejo ta trenutni položaj mimo obdelanih znakov. Žeton se vrne tako, da se vzame podniz niza, ki je bil uporabljen za ustvarjanje predmeta StringTokenizer.

StringJoiner je razred v java.util paket, ki se uporablja za sestavo zaporedja znakov (nizov), ločenih z ločilom in po izbiri, ki se začnejo s podano predpono in končajo s podano pripono. Čeprav je to mogoče storiti tudi s pomočjo razreda StringBuilder za dodajanje ločila za vsakim nizom, StringJoiner ponuja preprost način za to brez veliko kode za pisanje.

Sintaksa:

public StringJoiner(CharSequence delimiter)>

Zgoraj smo videli, da lahko ustvarimo niz s String Literal.

String demoString =Dobrodošli;

Tukaj JVM preveri nabor konstant nizov. Če niz ne obstaja, se ustvari nov primerek niza in postavi v bazen. Če niz obstaja, ne bo ustvaril novega predmeta. Namesto tega bo vrnil sklic na isti primerek. Predpomnilnik, ki shranjuje te primerke nizov, je znan kot String Constant pool ali String Pool. V prejšnjih različicah Jave do JDK 6 je bilo polje nizov znotraj prostora PermGen (Permanent Generation). Toda v JDK 7 je premaknjen v glavno območje kopice.

Nespremenljiv niz v Javi

V Javi so objekti nizov nespremenljivi. Nespremenljivo preprosto pomeni nespremenljivo ali nespremenljivo. Ko je objekt niza ustvarjen, njegovih podatkov ali stanja ni mogoče spremeniti, vendar je ustvarjen nov objekt niza.

Spodaj je izvedba teme:

Java
// Java Program to demonstrate Immutable String in Java import java.io.*; class GFG {  public static void main(String[] args)  {  String s = 'Sachin';    // concat() method appends  // the string at the end  s.concat(' Tendulkar');    // This will print Sachin  // because strings are  // immutable objects  System.out.println(s);  } }>

Izhod
Sachin>

Tu Sachin ni spremenjen, ampak je s Sachin Tendulkar ustvarjen nov predmet. Zato je niz znan kot nespremenljiv.

Kot lahko vidite na dani sliki, sta ustvarjena dva objekta, vendar se referenčna spremenljivka še vedno nanaša na Sachin in ne na Sachin Tendulkar. Toda če ga izrecno dodelimo referenčni spremenljivki, se bo nanašal na objekt Sachin Tendulkar.

Na primer:

Java
// Java Program to demonstrate Explicitly assigned strings import java.io.*; class GFG {  public static void main(String[] args)  {  String name = 'Sachin';  name = name.concat(' Tendulkar');  System.out.println(name);  } }>

Izhod
Sachin Tendulkar>

Dodelitev pomnilnika za niz

Kadarkoli je objekt String ustvarjen kot literal, bo predmet ustvarjen v nizu konstant String. To omogoča JVM, da optimizira inicializacijo dobesednega niza.

primer:

String demoString = 'Geeks';>

Niz je mogoče deklarirati tudi z uporabo a novo dinamično dodeljena. Če so nizi dinamično dodeljeni, jim je dodeljena nova pomnilniška lokacija v kopici. Ta niz ne bo dodan v skupino konstant String.

primer:

String demoString = new String('Geeks');>

Če želite ta niz shraniti v stalni bazen, ga boste morali internirati.

primer:

String internedString = demoString.intern();  // this will add the string to string constant pool.>

Zaželena je uporaba literalov nizov, saj JVM omogoča optimizacijo dodeljevanja pomnilnika.

Primer, ki prikazuje, kako deklarirati niz

Java
// Java code to illustrate String import java.io.*; import java.lang.*; class Test {  public static void main(String[] args)  {  // Declare String without using new operator  String name = 'techcodeview.com';  // Prints the String.  System.out.println('String name = ' + name);  // Declare String using new operator  String newString = new String('techcodeview.com');  // Prints the String.  System.out.println('String newString = ' + newString);  } }>

Izhod
String name = techcodeview.com String newString = techcodeview.com>


Opomba: Objekt niza je ustvarjen v območju kopice, literali pa so shranjeni v posebnem pomnilniškem območju, znanem kot bazen konstant nizov.

Zakaj se je skupina String preselila iz PermGen v the normalno območje kopice?

Prostor PermGen je omejen, privzeta velikost je samo 64 MB. bila je težava z ustvarjanjem in shranjevanjem preveč nizovnih objektov v prostoru PermGen. Zato je bil bazen String premaknjen na večje območje kopice. Da bi bila Java bolj učinkovita pri pomnilniku, se uporablja koncept nizovnega literala. Z uporabo ključne besede 'novo' bo JVM ustvaril nov objekt niza v običajnem območju kopice, tudi če je isti objekt niza prisoten v nizu nizov.

Na primer:

String demoString = new String('Bhubaneswar');>

Oglejmo si koncept s programom Java in vizualizirajmo dejansko strukturo pomnilnika JVM:

Spodaj je izvedba zgornjega pristopa:

Java
// Java program and visualize the // actual JVM memory structure // mentioned in image class StringStorage {  public static void main(String args[])  {  // Declaring Strings  String s1 = 'TAT';  String s2 = 'TAT';  String s3 = new String('TAT');  String s4 = new String('TAT');  // Printing all the Strings  System.out.println(s1);  System.out.println(s2);  System.out.println(s3);  System.out.println(s4);  } }>

Izhod
TAT TAT TAT TAT>
Pool nizov v Javi

Pool nizov v Javi

Opomba: Vsi objekti v Javi so shranjeni na kupu. Referenčna spremenljivka je na objekt, shranjen v območju sklada, ali pa so lahko vsebovani v drugih objektih, kar jih prav tako postavi v območje kopice.

Primer 1:

Java
// Construct String from subset of char array // Driver Class class GFG {  // main function  public static void main(String args[])  {  byte ascii[] = { 71, 70, 71 };  String firstString = new String(ascii);  System.out.println(firstString);  String secondString = new String(ascii, 1, 2);  System.out.println(secondString);  } }>

Izhod
GFG FG>

Primer 2:

Java
// Construct one string from another class GFG {  public static void main(String args[])  {  char characters[] = { 'G', 'f', 'g' };  String firstString = new String(characters);  String secondString = new String(firstString);  System.out.println(firstString);  System.out.println(secondString);  } }>

Izhod
Gfg Gfg>

Pogosto zastavljena vprašanja

1. Kaj so nizi v Javi?

Nizi so vrste predmetov, ki lahko shranjujejo znake kot elemente.

2. Zakaj so objekti nizov v Javi nespremenljivi?

Ker java uporablja koncept nizovnega literala. Recimo, da obstaja 5 referenčnih spremenljivk, vse se nanašajo na en objekt Sachin. Če ena referenčna spremenljivka spremeni vrednost predmeta, bodo nanjo vplivale vse referenčne spremenljivke. Zato so objekti nizov v Javi nespremenljivi.

3. Zakaj Java uporablja koncept nizovnega literala?

Da bo Java bolj učinkovita pri pomnilniku (ker se ne ustvarijo novi objekti, če že obstajajo v nizu stalnih nizov).