Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Operadores == e equals()

Olá pessoal!

Estou testando os operadores '==' e 'equals()' e percebi que ele reage de forma diferente.

Integer ina = new Integer(1);
                    Integer ine = new Integer(1);                    
                    int a = 1;
                    int b = 1;

                    String s1 = new String("GEEKS");
                    String s2 = new String("GEEKS");
                    System.out.println();

                    System.out.println(ina == ine); //== compara o nome do atributo
                    System.out.println(s1 == s2);
                    System.out.println(a == b);
                    System.out.println();

                    System.out.println(ina.equals(ine)); //equals compara o valor do atributo
                    System.out.println(s1.equals(s2));

Se rodarem este código, o resultado será:

false
false
true

true
true

O operador '==' nos traz resultado oposto quando usado em dados com tipos primitivos como int.

A dúvida é: como funciona o operador '==' para tipos primitivos e classes como Integer, String?

Obrigado

3 respostas
solução!

Bom dia John.

Utilizamos o operador "==" para comparar tipos primitivos e saber se os seus valores são iguais. Ele também é usado para saber se duas instâncias apontam para o mesmo objeto. Como String é uma classe, aqui você criou dois objetos:

String s1 = new String("GEEKS");
String s2 = new String("GEEKS");

Nessa sua comparação você está verificando se as referências s1 e s2 apontam para um mesmo local:

System.out.println(s1 == s2);

O resultado é false, pois apontam para objetos diferentes. Foi criado dois objetos, "s1" apontando para um e "s2" apontando para outro.

Para testar você pode apontar a referência "s1" para o mesmo objeto que a referência "s2" aponta. Comparando novamente o resultado será true.

String s1 = new String("GEEKS");
String s2 = new String("GEEKS");

s1=s2;

System.out.println(s1 == s2);

Oi John, tudo bem? No caso dos tipos primitivos o == compara os valores, isso por que não temos referências para comparar. No caso de classes (objetos) não temos acesso ao valor, mas sim a uma referência que é como se fosse um ponteiro. O == para objetos compara essas referências.

Como as referências são basicamente endereços de memória, que não se repetem para um mesmo dado, então, comparações com == sempre darão falso.

Deu pra entender mais ou menos?

Perfeitamente.

Obrigado pessoal