Olá Amigos, estou com duvida com este código:
class Carro1{
int chassi;
String marca;
String modelo;
Carro1(int chassi, String marca, String modelo){
this.chassi = chassi;
this.marca = marca;
this.modelo = modelo;
}
public boolean equals (Object o){
if((o instanceof Carro1)&&((Carro1)o).chassi==this.chassi)
return true;
else
return false;
}
public int hashCode(){
return chassi^marca.length()^13;//como interpretar esta linha?
}
}
public class TesteEquals1 {
public static void main(String[] args) {
Carro1 c1 = new Carro1(123,"GM","Corsa");
Carro1 c2 = new Carro1(123,"GM","Monza");
Carro1 c3 = new Carro1(1234,"GM","Corsa");
System.out.println("hashCode de c1: " + c1.hashCode());
System.out.println("hashCode de c2: " + c2.hashCode());
System.out.println("hashCode de c3: " + c3.hashCode());
System.out.println(c1.equals(c2));
System.out.println(c2.equals(c3));
}
}
A saída é essa:
hashCode de c1: 116
hashCode de c2: 116
hashCode de c3: 1245
true
false
A minha dúvida é quanto a entender como funciona o hashCode, eu achava que ele servia para verificar se os endereços são os mesmos, neste código eu entendi que ele faz uma comparação pelo chassi, o método equals retorna true, e entendi também que quando o equals retorna true o metodo hashCode tem que retornar true também, mas to confuso com a saída e também com a linha que comentei, obrigado desde já pela ajuda.