Olá caros GUJnaltas… Segue abaixo um código que fiz e que me gerou uma certa dúvida que não soube solucionar. Quando executo minha aplicação a resposta obtida é “A é igual ah a”, so que não era para ser diferentes ? Só daria iguais se eu utilizasse o método .equals ? Onde estou errando, alguem pode me ajudar ?
Gratto desde já pela ajuda…
public class ClassePrincipal {
public static void main(String[] args) {
String a = "Francisco Coelho";
String A = "Francisco Coelho";
if(a == A){
System.out.println("A é igual ah a");
}
else{
System.out.println("A é diferente de a");
}
}
}
Isso é uma pegadinha do Java. Quando você define uma constante string no seu código, ela é “instalada” (“interned” em inglês) em uma região especial da memória que é mais ou menos um HashSet contendo todas as strings “internadas” do seu programa. Portanto, se você tiver 2 constantes iguais, elas apontam para a mesma string. Mas isto aqui vai dar o resultado que você espera:
public class ClassePrincipal {
public static void main(String[] args) {
String a = new String ("Francisco Coelho");
String A = new String ("Francisco Coelho");
if(a == A){
System.out.println("A é igual ah a");
}
else{
System.out.println("A é diferente de a");
}
}
}
O código modificado deve imprimir que “A é diferente de a”, como você espera.
Exatamante,
como você definiu os valores das Strng no próprio código fonte, o comportamente é o que você viu.
Se você tivesse feito algo como:
String a = JOptionPane.showInputDialog(“Frase 1”);
String a = JOptionPane.showInputDialog(“Frase 2”);
E, ao executar sua classe, digitar exatamente a mesma frase 2x, vai ver como o “==” não vai ter o mesmo comportamento. Aí sim só o “.equals()” dá jeito.
Abraços.