Pegadinha: Pool de Strings

Ae galera
Essa nao chega a ser uma “Pegadinha”, mas vale quem for fazer a prova como eu pegar a documentação de algumas classes e imprimir para estudar… A classe String eh um exemplo…

Vejam o seguinte codigo e diga qual sera a saida

public class teste{ 
  public static void main(String[] args){ 
    
	String A = "JAVA";
	String B = new String("JAVA");
	String C = B.intern();
	System.out.println(A==B);
	System.out.println(A==C);

  }
} 

se não estou enganado, vai imprimir
false
false

String A = “JAVA”;
String B = new String(“JAVA”);

A e B são duas strings diferents com o mesmo conteúdo

e
String C = B.intern();
C é uma string criada com o array interno apontando para a mesma area de memoria que B, mas o endereço base da string é diferente tanto do A como do B :slight_smile:

Quase,

Não é bem assim, qdo vc chama o intern, o enrdereço retornado é o do pool.

Então o resultado será false, true;

[]'s

Uma pequena observação:

Se o código fosse:

public class teste{
  public static void main(String[] args){
   
   String A = "JAVA";
   String B = "JAVA";
   String C = B.intern();
   System.out.println(A==B);
   System.out.println(A==C);

  }
}

Daria true e true.

Eu expliquei isso em uma outra “pegadinha”, acho que foi numa das primeiras. Quem quiser uma explicacao mais a fundo, de uma procurada la.

Rafael

Explicou sim rafael mas nao tinha esse lance do intern().
A resposta correta se nao me engano seria:
false
true
O mlopes jah explicou pq…
Daki a poco (quando eu chegar em casa hehe to na facu) vou colocar uma variacao interessante envolvendo esse intern()
Abraços

Se bem que minha prova de certificação não entrou nesse nível de detalhe sobre intern. Só caiu o básico do pool mesmo:
String a = “java”;
String b = “java”;
//a == b true

Apenas complementando o que o mlopes disse…

intern() SEMPRE vai retornar o endereço do pool, isto é, MESMO se o objeto String não existesse no pool, ele criaria o objeto String, armazenaria no pool e retornaria sua referencia.

Modificando um pouco, para treinar:

public static void main(String[] args){ 
	String A = new String("JAVA"); 
	String B = new String("JAVA"); 
	String C = "JAVA";
	String D = B.intern(); 
	String E = B.substring(0, B.length()); // Retorna "JAVA"
	System.out.println(D==B); // false
	System.out.println(D==A); // false
	System.out.println(C==D); // true
	System.out.println(C==E); // false
} 

Gerson K.