Dúvida com comparação de Strings

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.

Vale MUITO a pena ler esse post

http://www.guj.com.br/posts/list/32457.java#592987