logo

Strenger i Java

I det gitte eksemplet vil bare ett objekt bli opprettet. For det første vil ikke JVM finne noe strengobjekt med verdien Welcome i strengkonstantpoolen, så det vil opprette et nytt objekt. Etter det vil den finne strengen med verdien Velkommen i bassenget, den vil ikke opprette et nytt objekt, men returnere referansen til samme instans. I denne artikkelen vil vi lære om Java Strings.

Hva er strenger i Java?

Strenger er den typen objekter som kan lagre karakteren til verdier, og i Java lagres hvert tegn i 16 biter i,e ved å bruke UTF 16-bits koding. En streng fungerer på samme måte som en rekke tegn i Java.



Eksempel:

String name = 'Geeks';>
Strengeeksempel i Java

Strengeeksempel i Java

Nedenfor er et eksempel på en streng i Java:



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);  } }>

Produksjon
example>

Måter å lage en streng på

Det er to måter å lage en streng på i Java:

  • Streng bokstavelig
  • Bruker nytt nøkkelord

Syntaks:

 = '';>

1. Streng bokstavelig

For å gjøre Java mer minneeffektivt (fordi ingen nye objekter opprettes hvis det allerede finnes i strengkonstantpoolen).



Eksempel:

String demoString = techcodeview.com;>

2. Bruke nytt nøkkelord

  • String s = ny String(Velkommen);
  • I et slikt tilfelle vil JVM opprette et nytt strengobjekt i normal (ikke-pool) haugminne og den bokstavelige velkomsten vil bli plassert i strengkonstantpoolen. Variabelen s vil referere til objektet i heapen (ikke-pool)

Eksempel:

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

Grensesnitt og klasser i strenger i Java

CharBuffer : Denne klassen implementerer CharSequence-grensesnittet. Denne klassen brukes til å tillate at tegnbuffere brukes i stedet for CharSequences. Et eksempel på slik bruk er pakken med regulære uttrykk java.util.regex.

String : Det er en sekvens av tegn. I Java er objekter av String uforanderlige, noe som betyr en konstant og kan ikke endres når de først er opprettet.

CharSequence-grensesnitt

CharSequence Interface brukes til å representere sekvensen av tegn i Java.
Klasser som er implementert ved hjelp av CharSequence-grensesnittet er nevnt nedenfor, og disse gir mye av funksjonalitet som understreng, lastoccurence, første forekomst, concatenate , toupper, tolower etc.

  1. String
  2. StringBuffer
  3. StringBuilder

1. String

String er en uforanderlig klasse som betyr en konstant og kan ikke endres når den først er opprettet, og hvis vi ønsker å endre, må vi lage et nytt objekt og til og med funksjonaliteten det gir som topper, tolower, etc alle disse returnerer et nytt objekt, det endres ikke det opprinnelige objektet. Den er automatisk trådsikker.

Syntaks

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

2. StringBuffer

StringBuffer er en jevnaldrende klasse av String , den er mutbar i naturen og den er trådsikker klasse , vi kan bruke den når vi har flertrådede miljøer og delt objekt av strengbuffer, dvs. brukt av flere tråder. Siden det er trådsikkert, er det ekstra overhead, så det brukes hovedsakelig til flertrådede programmer.

Syntaks:

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

3. StringBuilder

StringBuilder i Java representerer et alternativ til String og StringBuffer Class, da den skaper en foranderlig sekvens av tegn og den er ikke trådsikker. Den brukes kun innenfor tråden, så det er ingen ekstra overhead, så den brukes hovedsakelig for enkeltgjengede program.

Syntaks:

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

StringTokenizer

StringTokenizer klasse i Java brukes til å bryte en streng i tokens.

Eksempel:

String Tokenizer i Java

Et StringTokenizer-objekt opprettholder internt en gjeldende posisjon i strengen som skal tokeniseres. Noen operasjoner flytter denne nåværende posisjonen forbi tegnene som er behandlet. Et token returneres ved å ta en understreng av strengen som ble brukt til å lage StringTokenizer-objektet.

StringJoiner er en klasse i java.util pakke som brukes til å konstruere en sekvens av tegn(strenger) atskilt med et skilletegn og eventuelt starter med et oppgitt prefiks og slutter med et oppgitt suffiks. Selv om dette også kan gjøres ved hjelp av StringBuilder-klassen for å legge til et skilletegn etter hver streng, gir StringJoiner en enkel måte å gjøre det på uten mye kode å skrive.

Syntaks:

public StringJoiner(CharSequence delimiter)>

Ovenfor så vi at vi kan lage en streng av String Literal.

alfabetetall

String demoString =Velkommen;

Her sjekker JVM String Constant Pool. Hvis strengen ikke eksisterer, opprettes en ny strengforekomst og plasseres i en pool. Hvis strengen eksisterer, vil den ikke opprette et nytt objekt. Snarere vil den returnere referansen til samme instans. Bufferen som lagrer disse strengforekomstene er kjent som String Constant pool eller String Pool. I tidligere versjoner av Java var opp til JDK 6 String pool plassert inne i PermGen (Permanent Generation) plass. Men i JDK 7 flyttes den til hovedhaugområdet.

Uforanderlig streng i Java

I Java er strengobjekter uforanderlige. Uforanderlig betyr ganske enkelt uforanderlig eller uforanderlig. Når et strengobjekt er opprettet, kan dets data eller tilstand ikke endres, men et nytt strengobjekt opprettes.

Nedenfor er implementeringen av emnet:

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);  } }>

Produksjon
Sachin>

Her er ikke Sachin endret, men et nytt objekt opprettes med Sachin Tendulkar. Det er derfor en streng er kjent som uforanderlig.

Som du kan se i den gitte figuren er det opprettet to objekter, men referansevariabelen refererer fortsatt til Sachin og ikke til Sachin Tendulkar. Men hvis vi eksplisitt tildeler den til referansevariabelen, vil den referere til Sachin Tendulkar-objektet.

For eksempel:

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);  } }>

Produksjon
Sachin Tendulkar>

Minnetildeling av streng

Når et strengobjekt opprettes som et bokstavelig, vil objektet bli opprettet i strengkonstantpoolen. Dette gjør at JVM kan optimalisere initialiseringen av String literal.

Eksempel:

String demoString = 'Geeks';>

Strengen kan også deklareres ved å bruke en ny operatør dvs. dynamisk allokert. I tilfelle String er dynamisk tildelt, blir de tildelt en ny minneplassering i heapen. Denne strengen vil ikke bli lagt til strengkonstantpoolen.

splay trær

Eksempel:

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

Hvis du vil lagre denne strengen i det konstante bassenget, må du internere den.

Eksempel:

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

Det foretrekkes å bruke strengliteraler, da det lar JVM optimere minnetildeling.

Et eksempel som viser hvordan du deklarerer en streng

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);  } }>

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


Merk: String Object opprettes i Heap-området og bokstaver lagres i et spesielt minneområde kjent som string constant pool.

Hvorfor flyttet String-bassenget fra PermGen til de normalt haugområde?

PermGen-plassen er begrenset, standardstørrelsen er bare 64 MB. det var et problem med å lage og lagre for mange strengobjekter i PermGen-rom. Det er derfor String-bassenget ble flyttet til et større haugområde. For å gjøre Java mer minneeffektivt, brukes konseptet string literal. Ved å bruke det 'nye' nøkkelordet vil JVM opprette et nytt strengobjekt i det normale heapområdet selv om det samme strengobjektet er tilstede i strengpoolen.

For eksempel:

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

La oss ta en titt på konseptet med et Java-program og visualisere den faktiske JVM-minnestrukturen:

Nedenfor er implementeringen av tilnærmingen ovenfor:

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);  } }>

Produksjon
TAT TAT TAT TAT>
String Pool i Java

String Pool i Java

Merk: Alle objekter i Java er lagret i en haug. Referansevariabelen er til objektet som er lagret i stabelområdet, eller de kan være inneholdt i andre objekter som også plasserer dem i haugområdet.

Eksempel 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);  } }>

Produksjon
GFG FG>

Eksempel 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);  } }>

Produksjon
Gfg Gfg>

ofte stilte spørsmål

1. Hva er strenger i Java?

Strenger er typene objekter som kan lagre tegn som elementer.

2. Hvorfor strengobjekter er uforanderlige i Java?

Fordi java bruker begrepet streng bokstavelig. Anta at det er 5 referansevariabler, alle refererer til ett objekt Sachin. Hvis en referansevariabel endrer verdien til objektet, vil den bli påvirket av alle referansevariablene. Det er derfor strengobjekter er uforanderlige i Java.

3. Hvorfor Java bruker begrepet streng bokstavelig?

For å gjøre Java mer minneeffektivt (fordi ingen nye objekter opprettes hvis det allerede finnes i strengkonstantpoolen).