Nunca se deve comparar uma String utilizando um '==' e sempre o metodo
equals().

O operador '==' compara se os 2 operandos são exatemente iguais, ambos
"apontam" para a mesma região de memória. Isso funciona muito bem para os
tipos primitivos, agora para objetos, nem  sempre.

Já o método equals é um approach mais orientado a objeto, que permite que,
mesmo que estejam em locais de memória totalmente diferentes (ou seja, são,
em teoria, coisas diferentes para máquina virtual) *semânticamente* eles
representam a mesma coisa.

Entender este tipo de coisa é altamente importante para a futura utilização
da API de Collections, principalmente Maps e Sets.

Exemplo:

Set s1 = new LinkedSet();
> Pessoa p1 = new Pessoa("Flavio");
>
> set.add(p1);
>
> Pessoa p2 = new Pessoa("Flavio");
>
> set.add(p2);
>

Se o método equals nao estive implementado corretamente, acabariamos com 2
objetos semânticamente iguais em um conjunto (estrutura que prega a
unicidade de seus elementos).

A mesma coisa vale para as chaves de um mapa.

On Sat, Apr 11, 2009 at 11:01 PM, Luiz Felipe Barbosa <
[email protected]> wrote:

> Boa noite a todos!
> Estava fazendo o 1o problema da lista 1 e fui implementar o código para a
> função 3 da lista, procurar jogo. Eu dei override no método equals na classe
> Jogo, abaixo segue o trecho de código:
>
>
> @Override
>     public boolean equals(Object o){
>         String s;
>         s = (String) o;
>
>         if(this.getNome() == s){
>             return true;
>         }
>         else return false;
>     }
>
> E abaixo o código da comparação, na classe Main:
>
> static public void searchGame(ArrayList<Jogo> games){
>         Console cons = new Console();
>         ArrayList<Jogo> found = new ArrayList<Jogo>();
>         Runtime rt = Runtime.getRuntime();
>         String name;
>
>         System.out.println();
>         System.out.print("Nome do Jogo=> ");
>         name = cons.lerLinha();
>         for (Jogo j : games){
>             if (j.equals(name)){
>                 found.add(j);
>             }
>         }
>         System.out.println("Foram achados "+ found.size()+" jogos com '"+
> name+"' como nome.");
>         for(Jogo j: found){
>             System.out.println(j);
>         }
>         found = null;
>         rt.gc();
>
>     }
>
> E não importa quantos jogos com o mesmo nome eu insira na ArrayList, quando
> busco com esse nome o programa sempre diz que não há nenhum. Na verdade meu
> problema já foi sanado, mas gostaria de saber porque a minha idéia original
> não funcionou.
>
> Grato pela ajuda!
>
> --
> ________________________________
> --
> Luiz Felipe da Costa Pericolo Barbosa
> "The Heavens shall Tremble"
> "Take back the web"
>
> >
>


-- 
Flávio Coutinho da Costa

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Comp 
2 - Geral" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/comp2-geral?hl=en
-~----------~----~----~----~------~----~------~--~---

Responder a