Posts com Tag ‘==’

Bem pessoal,

Referência é como um terror assolando os códigos do Java, é ótimo ter referência nos objeto e trabalhar com elas… mas é perigoso ao mesmo tempo. A String e os Numbers provam isso a cada dia, como pode ser complicado trabalhar com o operador mágico e confuso “==”.

Como isso é confuso não? Com String nunca se usa o ==, mas nunca mesmo. Mas por que?

Toda string criada é guardada em um pool de strings na jvm, mas as referências mudam e como mudam.

– “aa” == “aa”, false.
– “aa”.equals(“aa”), true.

E quando falamos de inteiros? Ai complica…
– 1 == new Integer(1), true.
– 1 == 1, true.
– new Integer(1) == new Integer(1), false.
– new Integer(1).equals(new Integer(1)), true.

Mesmo vale para todos os outros Number’s.

Outra observação extremamente importante é:

Quando temos polimorfismo, ou seja:

public static boolean equals(Object o) {
    return o.equals(new Integer(1));
}

public static void main(String[] args) {
    System.out.println(equals(new Integer(1)));
}

Qual é o retorno desse método? FALSE!!!!
Isso em termos é um completo absurdo, deveria retornar de acordo com a classe final, mas enfim, não funciona. Se usar Generics funciona.

Então para constar, esse é o tipo de resultado que pode complicar e muito na hora de debbugar um código por se tratar de um erro complicado de se encontrar…

Fiquem ligados 🙂