Java String praktikant()

Det Java String klasse praktikant() metoden returnerer den interne streng. Det returnerer den kanoniske repræsentation af streng.

Den kan bruges til at returnere streng fra hukommelsen, hvis den er oprettet af et nyt nøgleord. Det opretter en nøjagtig kopi af heap-strengobjektet i String Constant Pool.

Underskrift

Signaturen for intern() metoden er angivet nedenfor:

 public String intern()  

Vender tilbage

interneret streng

String.intern()-metodens behov og virkemåde

Når en streng oprettes i Java, optager den hukommelse i heapen. Vi ved også, at String-klassen er uforanderlig. Derfor, når vi opretter en streng ved hjælp af det nye nøgleord, allokeres ny hukommelse i heapen for den tilsvarende streng, hvilket er uanset indholdet af arrayet. Overvej følgende kodestykke.

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

Println-sætningen udskrives falsk, fordi der er allokeret separat hukommelse for hver streng-literal. Således oprettes to nye strengobjekter i hukommelsen, dvs. str og str1. der har forskellige referencer.

Vi ved, at oprettelse af et objekt er en dyr operation i Java. Derfor, for at spare tid, kom Java-udviklere med konceptet String Constant Pool (SCP). SCP er et område inde i heap-hukommelsen. Den indeholder de unikke strenge. For at sætte strengene i strengpuljen skal man kalde praktikant() metode. Før du opretter et objekt i strengpuljen, kontrollerer JVM, om strengen allerede er til stede i poolen eller ej. Hvis strengen er til stede, returneres dens reference.

 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 ovenstående kodestykke kaldes intern() metoden på String-objekterne. Derfor er hukommelsen allokeret i SCP'en. For den anden sætning oprettes der ikke noget nyt strengobjekt, da indholdet af str og str1 er det samme. Derfor returneres referencen for objektet, der blev oprettet i den første sætning, for str1. Str og str1 peger altså begge på den samme hukommelse. Derfor udskrives udskriften sand.

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 nu

Produktion:

 false true  

Java String intern() Metode eksempel 2

Lad os se endnu et eksempel for at forstå string praktikant-konceptet.

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 nu

Produktion:

 true false true false true false  

Punkter at huske

Følgende er nogle vigtige punkter at huske angående intern() metoden:

1) En strengliteral påberåber sig altid intern() metoden, uanset om man nævner intern() metoden sammen med strengen literal eller ej. 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) Hver gang vi opretter et String-objekt ved hjælp af ny nøgleord, oprettes to objekter. For eksempel,

 String str = new ('Hello World');  

Her oprettes et objekt i heap-hukommelsen uden for SCP på grund af brugen af ​​det nye nøgleord. Som vi også har fået strengen bogstavelig ('Hello World'); derfor oprettes ét objekt inde i SCP'et, forudsat at det bogstavelige 'Hello World' ikke allerede er til stede i SCP'et.