Java String praktikant()

De Java String klass internera() metod returnerar den internerade strängen. Den returnerar den kanoniska representationen av sträng.

Den kan användas för att returnera sträng från minnet om den skapas av ett nytt nyckelord. Den skapar en exakt kopia av heap-strängobjektet i String Constant Pool.

Signatur

Signaturen för intern()-metoden ges nedan:

 public String intern()  

Returnerar

internt snöre

String.intern()-metodens behov och funktion

När en sträng skapas i Java upptar den minne i högen. Vi vet också att klassen String är oföränderlig. Därför, när vi skapar en sträng med det nya nyckelordet, allokeras nytt minne i högen för motsvarande sträng, vilket är oberoende av innehållet i arrayen. Tänk på följande kodavsnitt.

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

Uttrycket println skrivs ut falskt eftersom separat minne tilldelas för varje strängliteral. Således skapas två nya strängobjekt i minnet, dvs str och str1. som har olika referenser.

Vi vet att att skapa ett objekt är en kostsam operation i Java. Därför, för att spara tid, kom Java-utvecklare på konceptet String Constant Pool (SCP). SCP är ett område inuti heapminnet. Den innehåller de unika strängarna. För att lägga strängarna i strängpoolen måste man ringa till internera() metod. Innan ett objekt skapas i strängpoolen kontrollerar JVM om strängen redan finns i poolen eller inte. Om strängen finns, returneras dess referens.

 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 ovanstående kodavsnitt anropas intern()-metoden på String-objekten. Därför allokeras minnet i SCP:n. För den andra satsen skapas inget nytt strängobjekt eftersom innehållet i str och str1 är detsamma. Därför returneras referensen för objektet som skapades i den första satsen för str1. Str och str1 pekar alltså båda på samma minne. Därför skrivs det tryckta uttalandet ut sant.

Java String intern() Metodexempel

Filnamn: 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 }}  
Testa det nu

Produktion:

 false true  

Java String intern() Metodexempel 2

Låt oss se ytterligare ett exempel för att förstå strängpraktikkonceptet.

Filnamn: 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 } }  
Testa det nu

Produktion:

 true false true false true false  

Punkter att komma ihåg

Följande är några viktiga punkter att komma ihåg angående intern()-metoden:

1) En strängliteral anropar alltid intern()-metoden, oavsett om man nämner intern()-metoden tillsammans med strängen literal eller inte. Till exempel,

 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 skapar ett String-objekt med hjälp av ny nyckelord skapas två objekt. Till exempel,

 String str = new ('Hello World');  

Här skapas ett objekt i högminnet utanför SCP på grund av användningen av det nya nyckelordet. Som vi har fått strängen bokstavlig också ('Hello World'); därför skapas ett objekt inuti SCP:n, förutsatt att det bokstavliga 'Hello World' inte redan finns i SCP:n.