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.