🔍 Curiosidade Java: Sabia que o ==
e o .equals()
nem sempre fazem a mesma coisa?
E aí, pessoal! 👨💻
Hoje trago uma curiosidade bem interessante (e traiçoeira!) do Java que confunde muita gente — inclusive eu já tropecei nela quando estava começando: a diferença entre ==
e .equals()
para comparar objetos.
📌 O que parece ser… nem sempre é!
No Java, se você quiser comparar dois valores, instintivamente pode usar o operador ==
. E ele realmente funciona — mas só quando estamos lidando com tipos primitivos, como int
, char
, boolean
, etc.
Por exemplo:
Nesse caso, o resultado é true
, porque estamos comparando valores literais.
🤯 Mas olha o que acontece com objetos:
Por quê?
-
O
==
está comparando as referências (endereços de memória). -
O
.equals()
está comparando os conteúdos dos objetos.
Então, mesmo que os textos sejam idênticos, como estamos criando dois objetos diferentes com new
, eles vão ocupar posições diferentes na memória — daí o ==
retorna false
.
📸 Sugestão de imagem:
"Dois copos iguais, mas em prateleiras diferentes — mesma aparência, endereços diferentes."
🧠 Dica bônus: o pool de Strings
Se você usar literais de String, o Java guarda essas Strings em um "pool". Ou seja, reutiliza os objetos em vez de criar novos.
Como os dois apontam para o mesmo objeto na memória, o ==
funciona.
📸 Sugestão de imagem:
"nome1 e nome2 compartilhando o mesmo objeto 'Marcio' no pool de Strings."
🚨 Conclusão
Sempre que estiver comparando objetos no Java, use .equals()
— a não ser que você realmente queira saber se são o mesmo objeto em memória.
Essa é uma daquelas curiosidades que parecem bobas, mas que podem gerar bugs difíceis de rastrear.
Já caiu nessa armadilha alguma vez? Comenta aí! 💬
Comentários
Postar um comentário