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]. For more options, visit this group at http://groups.google.com/group/comp2-geral?hl=en.
