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.
