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 ?
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.
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, se voce fizer
t1 = new Trem();
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
class trem {
public String nome;
public String modelo;
public double carga_max;
// etc.
public boolean equals (Object obj) {
if (!(obj instanceof trem)) return false;
trem tr = (trem) obj;
return nome.equals(tr.nome)
&& modelo.equals(tr.modelo)
&& carga_max == tr.carga_max; // complete com os outros campos.
}
// 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.