Olá,
System.out.println(aluno == alunoQueVeioDoFormulario);
Não era para sair "true" ?
Não.
O operador ==
compara as se as referências são as mesmas. Ou seja, não são os mesmo objetos, são objetos distintos.
Já o equals faz a comparação baseado em um critério determinado por vc no método equals. Esse critério pode ser definido como se um atributo de um objeto for igual ao atributo do outro objeto, quero considerar que são iguais. Por isso, os resultados abaixo.
public class Test {
public static void main(String[] args) {
A a1 = new A(1);
A a2 = new A(1);
A a3 = a1;
System.out.println("a1 equals a2: " + (a1.equals(a2)));
System.out.println("a1 == a2: " + (a1 == a2));
System.out.println("a1 == a3: " + (a1 == a3));
}
}
class A {
int value;
public A(int value) {
this.value = value;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + value;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
A other = (A) obj;
if (value != other.value)
return false;
return true;
}
@Override
public String toString() {
return String.format("%d", this.value);
}
}
a1 equals a2: true
a1 == a2: false
a1 == a3: true
Resolveu? Por favor, marcar como solucionado ✔. Bons estudos! ⌣