oi,
estou começando em java.
vendo alguns testes fiz esse q segue abaixo.
minha pergunta: pq mesmo eu colocando os mesmos valores p os argumentos a resp é sp de diferente ?
class teste_trem {
public static void main(String[] args) {
tremt1=newtrem();t1.nome="Nome do Trem";t1.modelo="a1";t1.carga_max=5.0;t1.carga_atual=5.5;t1.cidade_orig="b1";t1.cidade_dest="c1";t1.Status=true;tremt2=newtrem();t2.nome="Nome do Trem";t2.modelo="a1";t2.carga_max=5.0;t2.carga_atual=5.5;t2.cidade_orig="b1";t2.cidade_dest="c1";t2.Status=true;
para comparar objetos vc tem que usar o metodo equals não o comparador ==.
no se caso para sua comparação funcionar 100%, vc deveria sobrescrever o metodo equals, comparando os atributos de cada objeto.
[]'s
M
mtakeda
Quando se trata d objetos, o == compara referências. Ou seja, ele verifica se as suas duas variáveis apontam para o mesmo objeto e não se eles são iguais.
assim,sevocefizert1=newTrem();t2=t1;
o == vai retornar verdadeiro.
Para comparar a igualdade de valores, voce tem que usar o metodo equals, como disseram acima. t1.equals(t2).
Para as classes que voce cria, voce deve sobrescrever o metodo equals para que a sua comparacao seja feito do jeito que voce deseja. De uma procurada no metodo equals e no hashCode
Você precisa sobreescrever o método equals para que se adequar às suas necessidades.
Shelson
daniel,
agora eu que tenho uma duvida:
como sobrescrever o metodo equals ?
T
thingol
Ou seja, o que o Daniel falou é algo como:
classtrem {
publicStringnome;
publicStringmodelo;
publicdoublecarga_max;
// etc.
publicbooleanequals (Objectobj) {
if (!(objinstanceoftrem)) returnfalse;
tremtr = (trem) obj;
returnnome.equals(tr.nome)
&& modelo.equals(tr.modelo)
&& carga_max == tr.carga_max; // completecomosoutroscampos.
}
// etc.
}
Dica: para sobreescrever use SEMPRE “public boolean equals (Object obj)”. Use meu código como receita de bolo, se desejar, ou então compre o livro “Effective Java”, de Joshua Bloch, onde isso e mais algumas outras coisas estão explicadas.
Como foi falado ontem na aula do D. Destro, vc só deve usar == para comparar referencias ou variáveis primitivas. Isso é questão pegadinha de certificação.
Dois objetos podem ser logicamente iguais mais serem diferentes e residirem em endereços de memória (referencias) diferentes.