logo

Pasante de cadenas de Java ()

El Clase de cadena Java interno() El método devuelve la cadena interna. Devuelve la representación canónica de la cadena.

Se puede utilizar para devolver una cadena de la memoria si se crea mediante una nueva palabra clave. Crea una copia exacta del objeto de cadena del montón en el grupo de constantes de cadena.

Firma

La firma del método intern() se proporciona a continuación:

 public String intern() 

Devoluciones

cadena internada

La necesidad y el funcionamiento del método String.intern()

Cuando se crea una cadena en Java, ocupa memoria en el montón. Además, sabemos que la clase String es inmutable. Por lo tanto, cada vez que creamos una cadena usando la nueva palabra clave, se asigna nueva memoria en el montón para la cadena correspondiente, lo cual es independiente del contenido de la matriz. Considere el siguiente fragmento de código.

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

La declaración println imprime falso porque se asigna memoria separada para cada literal de cadena. Por lo tanto, se crean dos nuevos objetos de cadena en la memoria, es decir, str y str1. que tiene diferentes referencias.

Sabemos que crear un objeto es una operación costosa en Java. Por lo tanto, para ahorrar tiempo, a los desarrolladores de Java se les ocurrió el concepto de String Constant Pool (SCP). El SCP es un área dentro de la memoria del montón. Contiene las cadenas únicas. Para colocar las cadenas en el grupo de cadenas, es necesario llamar al interno() método. Antes de crear un objeto en el grupo de cadenas, la JVM comprueba si la cadena ya está presente en el grupo o no. Si la cadena está presente, se devuelve su referencia.

 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 

En el fragmento de código anterior, el método intern() se invoca en los objetos String. Por tanto, la memoria se asigna en el SCP. Para la segunda declaración, no se crea ningún nuevo objeto de cadena ya que el contenido de str y str1 es el mismo. Por lo tanto, la referencia del objeto creado en la primera declaración se devuelve para str1. Por lo tanto, str y str1 apuntan a la misma memoria. Por lo tanto, la declaración impresa se imprime como verdadera.

Ejemplo de método Java String intern()

Nombre del archivo: 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 }} 
Pruébalo ahora

Producción:

 false true 

Ejemplo 2 del método Java String intern()

Veamos un ejemplo más para entender el concepto de interno de cadena.

Nombre del archivo: InternExample2.java

cuantas semanas en un mes
 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 } } 
Pruébalo ahora

Producción:

 true false true false true false 

Puntos para recordar

A continuación se detallan algunos puntos importantes que debe recordar con respecto al método intern():

1) Un literal de cadena siempre invoca el método intern(), ya sea que se mencione el método intern() junto con el literal de cadena o no. Por ejemplo,

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

2) Siempre que creamos un objeto String usando el nuevo palabra clave, se crean dos objetos. Por ejemplo,

 String str = new ('Hello World'); 

Aquí, se crea un objeto en la memoria dinámica fuera del SCP debido al uso de la nueva palabra clave. Como también tenemos la cadena literal ('Hello World'); por lo tanto, se crea un objeto dentro del SCP, siempre que el literal 'Hola mundo' ya no esté presente en el SCP.