logo

Stażysta w Java String()

The Klasa ciągu Java stażysta() Metoda zwraca internowany ciąg. Zwraca kanoniczną reprezentację ciągu.

Można go użyć do zwrócenia ciągu znaków z pamięci, jeśli został on utworzony za pomocą nowego słowa kluczowego. Tworzy dokładną kopię obiektu ciągu sterty w puli stałych ciągów.

Podpis

Sygnatura metody intern() znajduje się poniżej:

 public String intern() 

Zwroty

internowany ciąg

Potrzeba i działanie metody String.intern().

Kiedy ciąg znaków jest tworzony w Javie, zajmuje on pamięć na stercie. Wiemy również, że klasa String jest niezmienna. Dlatego za każdym razem, gdy tworzymy ciąg znaków za pomocą słowa kluczowego new, na stercie przydzielana jest nowa pamięć dla odpowiedniego ciągu, niezależnie od zawartości tablicy. Rozważ następujący fragment kodu.

Nick Pulos Czarna błyskawica
 String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false 

Instrukcja println wypisuje wartość false, ponieważ dla każdego literału łańcuchowego przydzielana jest osobna pamięć. W ten sposób w pamięci tworzone są dwa nowe obiekty typu string, tj. str i str1. który zawiera różne odniesienia.

Wiemy, że utworzenie obiektu w Javie jest kosztowną operacją. Dlatego, aby zaoszczędzić czas, programiści Java wpadli na koncepcję String Constant Pool (SCP). SCP to obszar wewnątrz pamięci sterty. Zawiera unikalne ciągi znaków. Aby umieścić ciągi znaków w puli ciągów, należy wywołać metodę stażysta() metoda. Przed utworzeniem obiektu w puli ciągów JVM sprawdza, czy ciąg znaków już istnieje w puli, czy nie. Jeśli ciąg jest obecny, zwracane jest jego odwołanie.

 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 

W powyższym fragmencie kodu metoda intern() jest wywoływana na obiektach String. Dlatego pamięć jest przydzielana w SCP. W przypadku drugiej instrukcji nie jest tworzony żaden nowy obiekt typu string, ponieważ zawartość str i str1 jest taka sama. Dlatego dla str1 zwracane jest odwołanie do obiektu utworzonego w pierwszej instrukcji. Zatem str i str1 wskazują na tę samą pamięć. Dlatego instrukcja print wypisuje wartość true.

Przykład metody Java String intern().

Nazwa pliku: Przykład stażysty.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 }} 
Przetestuj teraz

Wyjście:

dekodowanie base64 w js
 false true 

Metoda Java String intern() Przykład 2

Zobaczmy jeszcze jeden przykład, aby zrozumieć koncepcję stażysty stringowego.

Nazwa pliku: Przykład stażysty2.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 } } 
Przetestuj teraz

Wyjście:

 true false true false true false 

Punkty do zapamiętania

Poniżej znajduje się kilka ważnych punktów, o których należy pamiętać w odniesieniu do metody intern():

1) Literał łańcuchowy zawsze wywołuje metodę intern(), niezależnie od tego, czy wspomina się o metodzie intern() wraz z literałem łańcuchowym, czy nie. Na przykład,

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

2) Ilekroć tworzymy obiekt String za pomocą metody nowy słowo kluczowe, tworzone są dwa obiekty. Na przykład,

 String str = new ('Hello World'); 

W tym przypadku tworzony jest jeden obiekt w pamięci sterty poza obiektem SCP z powodu użycia słowa kluczowego new. Ponieważ mamy także literał łańcuchowy („Hello World”); w związku z tym wewnątrz SCP tworzony jest jeden obiekt, pod warunkiem, że dosłowne „Hello World” nie jest już obecne w SCP.