Exercicio sobre pool de Strings

iai pessual, bele?

então, segue o exercicio:

[code]public class Main
{
public static void main(String[] args) {
String S1 = “A”;
String S2 = new String(“A”);

 System.out.println( S1.intern() == S2 );
 System.out.println( S2.intern() == S2 );
 System.out.println( S2.intern() == S1 );

}
}[/code]

alguem poderia me explicar pq imprime false, false, true??

eu não intendi esse método intern…na verdade eu nem o conhecia.

vlw!!

Fala cs.santos0, a classe String tem um pool de string unicas que é inicialmente vazio, então quando vc cria uma string com o operador “=”, o objeto S1, este é colocado no pool diretamente, logo quando vc chama o método intern() para o objeto S1, é retornado apenas uma referência a esse objeto que já está no pool, já para o objeto S2 criado com o operador new, é criada uma nova referência em memória, que é diferente da referência do objeto S1, por isso o primeiro teste da falso, lembre da diferença entre == e equals, no segundo teste o objeto S2 não está no pool ainda, então o método intern() adiciona-o no pool e retorna uma nova referência a este objeto, que agora é a mesma do objeto S1, por isso o segundo teste também da falso, ja no último teste ambos os objetos tem a mesma referência por isso o resultado é verdadeiro.

“intern” é um método que retorna uma cópia da string, só que localizada no pool de strings. Como cada string só pode aparecer uma única vez no pool de strings, então duas strings diferentes (em termos de objetos, não de conteúdo) podem retornar o mesmo valor na chamada de “intern”, se elas tiverem o mesmo conteúdo.

String s1 = new String ("abacaxi");
String s2 = new String ("abacaxi");
System.out.println (s1 == s2); // imprime false porque ambas as strings são diferentes porque são objetos diferentes
System.out.println (s1.intern() == s2.intern()); // imprime true porque ambas as strings, quando "internadas" no pool, são associadas com a mesma string "abacaxi" do pool.

Bom pessual…fico mto grato pela ajuda…realmente clareou para mim…creio que o conteudo de String para o exame eu ja tenho em mente.

Obrigado…e sigo nos estudos aki… :smiley:

toni.arc
Desculpa a intromição é que já vi uma questão com esse intern e não tinha compreendido muito. Deixa eu ver se entendi.
Quando se faz:

String S1 = "A"; //Aiciona no pool de Strings String S2 = new String("A"); //Cria uma instância na memória.

A primeira comparação System.out.println( S1.intern() == S2 ); imprime false pq se está comparando um String que está no pool e uma String que está na memória.
A segunda comparação System.out.println( S2.intern() == S2 ); imprime false pq está tentando comparar uma String que foi adicionada ao pool que agora é a mesma de S1 com uma String ainda na memória S2.
A terceira comparação System.out.println( S2.intern() == S1 ); imprime true pq agora a string q está no pool pode ser utizada por inten() e é comparada com S1 que também está no pool.

Desculpa a inromição mas gostária muito de aprender esse método intern().

Não lembro de terem caído questões sobre pool de strings. Isso faz parte dos objetivos da prova?

bom…existe a parte relacionda a String, StringBuider, StringBuffer, e junto com elas o pool de strings…

em um simulado preparatorio q estava fazendo caiu essa questão…

Ola !!!
Aproveitando o assunto!

String a = new String(“A”);

Quantos objetos são criados ?
Por acaso seriam 2, um no heap e outro no poll de String ?

Valeu

Lógicamente é criado um único objeto String de nome a já que vc está instanciando apenas uma única String. E a String vai está no heap. No exemplo acima ela só foi colocada no pool pq o método intern() adiciona ela no pool.

Espero ter ajudado.

este exercicio e mais velho que meu tataravo

Então nem todas as Strings vivem no pool, só quando ela é inicializada literalmente ou quando utilizado o método intern(), isso ?

[code]String s = new String(“abc”); //Cria objeto na memória.

String s1 = “abc”; //Cria uma string no pool.[/code]

Mateus eu não sei perfeitamente não mas é isso que ta mostrado acima.

Nao caiu nenhuma questão de pool na minha prova.

Em vez de estudar isso, leia mais umas 10 vezes o capitulo 1, 2 e 3 da kathy…
vale muitissimo mais a pena =)

Abraços!

Se não me engano isso caia na SCJP 1.4, mas tiraram isso na 5.