O Classe String Java estagiário() método retorna a string internada. Ele retorna a representação canônica da string.
Pode ser usado para retornar uma string da memória se for criada por uma nova palavra-chave. Ele cria uma cópia exata do objeto heap string no String Constant Pool.
Assinatura
A assinatura do método intern() é fornecida abaixo:
public String intern()
Devoluções
corda internada
A necessidade e funcionamento do método String.intern()
Quando uma string é criada em Java, ela ocupa memória no heap. Além disso, sabemos que a classe String é imutável. Portanto, sempre que criamos uma string usando a palavra-chave new, uma nova memória é alocada no heap para a string correspondente, o que independe do conteúdo do array. Considere o seguinte trecho de código.
String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false
A instrução println imprime falso porque uma memória separada é alocada para cada string literal. Assim, dois novos objetos string são criados na memória, ou seja, str e str1. que contém referências diferentes.
Sabemos que criar um objeto é uma operação cara em Java. Portanto, para economizar tempo, os desenvolvedores Java criaram o conceito de String Constant Pool (SCP). O SCP é uma área dentro da memória heap. Ele contém as strings exclusivas. Para colocar as strings no pool de strings, é necessário chamar o método estagiário() método. Antes de criar um objeto no pool de strings, a JVM verifica se a string já está presente no pool ou não. Se a string estiver presente, sua referência será retornada.
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
No trecho de código acima, o método intern() é invocado nos objetos String. Portanto, a memória é alocada no SCP. Para a segunda instrução, nenhum novo objeto string é criado, pois o conteúdo de str e str1 é o mesmo. Portanto, a referência do objeto criado na primeira instrução é retornada para str1. Assim, str e str1 apontam para a mesma memória. Portanto, a instrução print é verdadeira.
Exemplo de método Java String intern()
Nome do arquivo: 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 }}Teste agora
Saída:
false true
Java String intern() Método Exemplo 2
Vejamos mais um exemplo para entender o conceito de estagiário de string.
Nome do arquivo: 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 } }Teste agora
Saída:
true false true false true false
Pontos para lembrar
A seguir estão alguns pontos importantes a serem lembrados em relação ao método intern():
1) Uma string literal sempre invoca o método intern(), quer se mencione o método intern() junto com a string literal ou não. Por exemplo,
String s = 'd'.intern(); String p = 'd'; // compiler treats it as String p = 'd'.intern(); System.out.println(s == p); // prints true
2) Sempre que criamos um objeto String usando o novo palavra-chave, dois objetos são criados. Por exemplo,
int para string java
String str = new ('Hello World');
Aqui, um objeto é criado na memória heap fora do SCP devido ao uso da palavra-chave new. Como também obtivemos a string literal ('Hello World'); portanto, um objeto é criado dentro do SCP, desde que o literal 'Hello World' já não esteja presente no SCP.