Pegadinha: Pool de Strings

7 respostas
duardor

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);

  }
}

7 Respostas

urubatan

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:

mlopes

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

boaglio

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.

Rafael_Steil

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

duardor

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

Elvis.The.Pelvis
Se bem que minha prova de certificação não entrou nesse nível de detalhe sobre intern.  caiu o básico do pool mesmo:

String a = java;

String b = java;

//a == b true
Gerson

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.

Criado 17 de março de 2003
Ultima resposta 19 de mar. de 2003
Respostas 7
Participantes 7