logo

Java String intern()

De Java String klasse turnuskandidat() metoden returnerer den internerte strengen. Den returnerer den kanoniske representasjonen av streng.

len of array i java

Den kan brukes til å returnere streng fra minnet hvis den er opprettet av et nytt nøkkelord. Den lager en nøyaktig kopi av heap-strengobjektet i String Constant Pool.

Signatur

Signaturen til intern()-metoden er gitt nedenfor:

 public String intern() 

Returnerer

internert streng

Behovet og virkemåten til String.intern()-metoden

Når en streng opprettes i Java, opptar den minne i haugen. Dessuten vet vi at String-klassen er uforanderlig. Derfor, hver gang vi oppretter en streng ved å bruke det nye nøkkelordet, tildeles nytt minne i haugen for tilsvarende streng, som er uavhengig av innholdet i matrisen. Tenk på følgende kodebit.

 String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false 

Println-setningen skrives ut falsk fordi separat minne er tildelt for hver strengliteral. Dermed opprettes to nye strengobjekter i minnet, dvs. str og str1. som har forskjellige referanser.

javascript utskrift

Vi vet at å lage et objekt er en kostbar operasjon i Java. Derfor, for å spare tid, kom Java-utviklere opp med konseptet String Constant Pool (SCP). SCP er et område inne i heap-minnet. Den inneholder de unike strengene. For å sette strengene i strengbassenget, må man ringe til turnuskandidat() metode. Før du oppretter et objekt i strengpoolen, sjekker JVM om strengen allerede er tilstede i bassenget eller ikke. Hvis strengen er til stede, returneres dens referanse.

 String str = new String('Welcome to JavaTpoint').intern(); // statement - 1 String str1 = new String('Welcome to JavaTpoint').intern(); // statement - 2 System.out.println(str1 == str); // prints true 

I kodebiten ovenfor påkalles intern()-metoden på String-objektene. Derfor er minnet allokert i SCP. For den andre setningen opprettes det ikke noe nytt strengobjekt da innholdet i str og str1 er det samme. Derfor returneres referansen til objektet opprettet i den første setningen for str1. Dermed peker str og str1 begge til samme minne. Derfor skrives utsagnet ut sant.

Java String intern() Metodeeksempel

Filnavn: InternExample.java

 public class InternExample{ public static void main(String args[]){ String s1=new String('hello'); String s2='hello'; String s3=s1.intern();//returns string from pool, now it will be same as s2 System.out.println(s1==s2);//false because reference variables are pointing to different instance System.out.println(s2==s3);//true because reference variables are pointing to same instance }} 
Test det nå

Produksjon:

 false true 

Java String intern() Metode eksempel 2

La oss se enda et eksempel for å forstå string intern konseptet.

all caps snarvei excel

Filnavn: InternExample2.java

 public class InternExample2 { public static void main(String[] args) { String s1 = 'Javatpoint'; String s2 = s1.intern(); String s3 = new String('Javatpoint'); String s4 = s3.intern(); System.out.println(s1==s2); // True System.out.println(s1==s3); // False System.out.println(s1==s4); // True System.out.println(s2==s3); // False System.out.println(s2==s4); // True System.out.println(s3==s4); // False } } 
Test det nå

Produksjon:

 true false true false true false 

Poeng å huske

Følgende er noen viktige punkter å huske på angående intern()-metoden:

hva betyr xdxd

1) En strengliteral påkaller alltid intern()-metoden, enten man nevner intern()-metoden sammen med strengen literal eller ikke. For eksempel,

 String s = 'd'.intern(); String p = 'd'; // compiler treats it as String p = 'd'.intern(); System.out.println(s == p); // prints true 

2) Når vi lager et String-objekt ved å bruke ny nøkkelord, opprettes to objekter. For eksempel,

 String str = new ('Hello World'); 

Her opprettes ett objekt i heap-minnet utenfor SCP på grunn av bruken av det nye nøkkelordet. Som vi har fått strengen bokstavelig også ('Hello World'); derfor opprettes ett objekt inne i SCP, forutsatt at den bokstavelige 'Hello World' ikke allerede er til stede i SCP.