Leonardo, vc pediu ajuda a algum monitor além daquele e-mail que vc mandou
pra lista a 4 dias?

Na próxima lista, procure fazer com mais antecedência, já que vc está com
dificuldade na matéria.

Abraço

Peter P. Lupo
http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo
MPS.BR Authorized Implementation Practitioner - Certified ScrumMaster
Sun Certified Java Associate - Java Brown Belt
+55 (021) 81742487


2010/4/27 Leonardo Gonçalves Costa <[email protected]>

> Segurei até onde eu pude. Tentei, tentei e vou enviar a lista "faltando".
>
> Não consigo entender mesmo essa letra e). Não consegui usar nenhum dos
> métodos propostos aqui e não consegui entender as "mensagens novas" (não
> comentadas em sala) aos objetos. Peço perdão, mas esforço não faltou.
>
> Abraço.
>
>
>
> Em 26 de abril de 2010 12:45, Miguel Jonathan <[email protected]>escreveu:
>
> O método equals() é usado em classes em que é possível haver dois objetos
>> distintos (ou seja, duas instâncias em locais diferentes da memória) mas que
>> devem ser considerados iguais para fins da aplicação,
>>
>> Caso típico são as strings. Se eu tenho duas strings criadas assim:
>> String nomeUniversidade = new String("UFRJ");
>> String minhaUniversidade = new String("UFRJ");
>>
>> haverá dois objetos distintos, em endereços diferentes.
>> Mas para todos os efeitos, gostaríamos de considerar as duas strings como
>> iguais, por exemplo, se quisermos saber se minhaUniversidade é igual a
>> nomeUniversidade, a resposta deveria ser true.
>>
>> Mas se usarmos o comparador ==, a resposta será false, pois são objetos
>> diferentes:
>> minhaUniversidade == nomeUniversidade dá false.
>> Aí entra o método equals, onde minhaUniversidade.equals(nomeUniversidade)
>> retorna true!
>>
>> No caso específico dos enums, isso nunca ocorre, porque cada instância é
>> única, por isso não há necessidade de haver método equals com enums.
>>
>> Jonathan
>>
>> 2010/4/26 Peter P. Lupo <[email protected]>
>>
>> Eu vou partir da sua conclusão para explicar o que está havendo:
>>>
>>> "Enfim, me alonguei muito mais do que pretendia, mas fica o aviso ai pra
>>> quem for usar o ".equals"... tem que usar "toString" se não não funciona
>>> !!!"
>>>
>>> E vou fazer um acréscimo para ficar correto:
>>>
>>> pra quem for usar o ".equals"... tem que usar "toString" se não não
>>> funciona *ao comparar com outra String* !!!
>>>
>>> Sim, pois BOY é uma instância da classe Cargo e nome é uma instância da
>>> classe String. A comparação de Cargo com String tem que dar false assim como
>>> cadeira.equals(mesa) tem que dar false! ;-)
>>>
>>> Isso não significa que sempre que vc for usar o equals você tem que usar
>>> o toString junto. Na verdade o ideal é não fazer isto e deixar que uma
>>> instância saiba se comparar (através de informações como sua classe,
>>> subclasse e valores de seus atributos) a instâncias de outras classes.
>>>
>>> Imagina se vc muda o toString de Cadeira para retornar a String "Sou uma
>>> mobília" e faz o mesmo com Mesa.
>>>
>>> Se você fizer cadeira.equals(mesa) retornaria true quando deveria
>>> retornar false.
>>>
>>> Então o ideal é não usar o toString na comparação a menos que o que vc
>>> queira saber é realmente se uma determinada instância retorna um valor
>>> específico no toString, que é o caso do exercício da lista.
>>>
>>> Respondendo suas outras observações:
>>>
>>> (...)
>>>  Bom, será mesmo que esse Cargo.BOY retorna uma String ?!", testei e vi
>>> que era verdade.
>>> (...)
>>> Ai eu fui por partes, coloquei na classe SimulaFolha isto
>>> "System.out.println(Cargo.BOY), e no consolhe aparecia certinho a palavra
>>> "BOY".
>>> (...)
>>>
>>> Isto não significa que Cargo.BOY retorna String. De fato, NÃO retorna!
>>> Cargo.BOY é uma referência para uma instância do tipo Cargo.
>>> O que acontece é que existe um método println que recebe objetos e chama
>>> o .toString() internamente ao imprimir na console.
>>> O resultado da chamada que vc fez é o equivalente a
>>> System.out.println(Cargo.BOY.toString());
>>>
>>> Este é um comportamento bastante comum na API. Ao se precisar representar
>>> um objeto de uma forma inteligível, o toString é comumente chamado. O mesmo
>>> acontece se você tentar concatenar um objeto com uma string:
>>>
>>> "Este objeto é um " + Cargo.BOY;
>>>
>>> O toString de BOY é chamado "automagicamente" pelo compilador, sendo esta
>>> chamada equivalente a
>>>
>>> "Este objeto é um " + Cargo.BOY.toString();
>>>
>>>
>>> E realmente este parece ter sido o método em que o pessoal teve mais
>>> dificuldade mas até agora não vi ninguém com ESTA dificuldade. :-P
>>>
>>>
>>> Abraço
>>>
>>> Peter P. Lupo
>>> http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo
>>> MPS.BR Authorized Implementation Practitioner - Certified ScrumMaster
>>> Sun Certified Java Associate - Java Brown Belt
>>> +55 (021) 81742487
>>>
>>>
>>> 2010/4/26 Thiago Carvalho <[email protected]>
>>>
>>> Pelo visto o método "public static Cargo obtem(String nome" é de longa a
>>>> parte mais difícil da lista. Eu gostaria apenas de fazer um comentário 
>>>> sobre
>>>> como o ".equals" pode ser altamente traiçoeiro. Como o professor pediu, eu
>>>> não vou colocar meu código aqui exatamente pelos motivos que ele mencionou,
>>>> MAS dentro do método obtem, eu criei um vetor dos 4 tipos de cargo e usei o
>>>> ".equals" para comparar esses vetores, um a um, com a String nome do
>>>> argumento, caso ele não encontrasse nenhum dos 4, ele retornava null. O
>>>> compilador não reclamou, mas pra qualquer coisa que eu digitasse na String
>>>> nome, inclusive "boy", "motorista" ou os outros 2, ele retornava null. Ai 
>>>> eu
>>>> fui por partes, coloquei na classe SimulaFolha isto
>>>> "System.out.println(Cargo.BOY), e no consolhe aparecia certinho a palavra
>>>> "BOY".Bom, depois de umas 3 horas fazendo mil testes e modificações (fui
>>>> filtrando varias partes do codigo pra tentar achar o erro), eu acabei
>>>> descobrindo que se você pedir pra ele imprimir Cargo.BOY, ele imprime a
>>>> String "BOY" usando o metódo toString (que ja está automaticamente 
>>>> declarado
>>>> pelo fato de ser enum, e sempre é igual ao nome do enum), mas quando você
>>>> usa "Cargo.BOY.equals(nome)" (nome é a String declarada no inicio do método
>>>> obtem) ele compara o OBJETO BOY com a String nome e nunca retorna 
>>>> verdadeiro
>>>> ! Eu sinceramente achei isso muito "cilada", porque quando todos os cargos
>>>> retornavam null, a primeira coisa que eu pensei foi "Bom, será mesmo que
>>>> esse Cargo.BOY retorna uma String ?!", testei e vi que era verdade. Depois
>>>> fiquei rodando em várias outras partes do código, tentando mil coisas, pra
>>>> no final descobrir que era só colocar "Cargo.BOY.toString().equals(nome)"
>>>> que tudo ia funcionar. Na minha cabeça, como o ".equals" é um método da
>>>> classe String, quando eu pedisse para comparar Cargo.BOY com alguma coisa,
>>>> ele automaticamente ia usar o método toString do objeto BOY e retornar uma
>>>> String e não o objeto inteiro.
>>>>
>>>> Enfim, me alonguei muito mais do que pretendia, mas fica o aviso ai pra
>>>> quem for usar o ".equals"... tem que usar "toString" se não não funciona 
>>>> !!!
>>>>
>>>> --
>>>> 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]<comp2-geral%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/comp2-geral?hl=en.
>>>>
>>>
>>>  --
>>> 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]<comp2-geral%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/comp2-geral?hl=en.
>>>
>>
>>  --
>> 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]<comp2-geral%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/comp2-geral?hl=en.
>>
>
>  --
> 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]<comp2-geral%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/comp2-geral?hl=en.
>

-- 
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