Olhem essas comparações:
public class A
{
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 );
}
}
O que faz esse método intern() ?
O que é realmente comparado ?
Dá uma olhadinha aqui:
http://www.guj.com.br/java.tutorial.artigo.103.1.guj
Não sei se vai te ajudar, eu passei só o olho no conteúdo.
Até.
nao tenho ideia doq faz o Intern…
na documentação http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
diz [quote]Returns a canonical representation for the string object.[/quote]
de qqer jeito… não se compara Strings com ==
deve usar o metodo .equals
s1.equals(s2)
Isso é questão de certificação, por isso quero entender seu funcionamento.
intern(): retorna uma referência para um objeto String correspondente armazenado no “pool”;
http://www.guj.com.br/java.tutorial.artigo.103.1.guj
Jovem, acho que entendi…veja:
A diferença entre as duas formas de construção string é que , o lugar onde estas
strings são disponíveis.
/*
Quando você cria o objeto String no formato abaixo então o objeto String está
disponível dentro do pool de string literals. Se a mesma string já existe no pool de
strings então a antiga string vai ser substituida pela nova.
*/
String s = "Testing String";
/*
Quando você constroi a String chamando a palavra chave new então o objeto String vai
ser criado em tempo de execução e não vai existir no pool de strings. Para colocar
esta string encapsulada dentro do pool chame o método intern()
*/
String s1 = new String("Testing String");
veja:http://www.mail-archive.com/java-list@soujava.org.br/msg36608.html