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