Q & A
equals()
and==
Equality can be reference based or valued based:
==
can be used for primitive types, because equality and reference checking work identically for primitives.equals
for object types (==
performs reference check only)
public class Animal {
private String name;
public Animal (String name) { this.name = name; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public static void main(String args[]) {
List<Animal> animals = Arrays.asList(
new Animal("cat"),
new Animal("dog"),
new Animal("chicken"));
// these will print out false, false, false if you not implement `equals` and `hashCode`
System.out.println(animals.contains(new Animal("cat")));
System.out.println(animals.contains(new Animal("dog")));
System.out.println(animals.contains(new Animal("foo")));
}
}
Add these 2, then it will print out true
, true
, false
.
@Override
public boolean equals(Object object) {
if(this == object)
return true;
if(object == null || getClass() != object.getClass())
return false;
Animal animal = (Animal) object;
return Objects.equals(name, animal.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
- Method overloading & method overriding https://www.geeksforgeeks.org/difference-between-method-overloading-and-method-overriding-in-java/