The equals() method in Java is commonly used for comparison, and developers often override it in custom classes to determine object equality. Consider the following example of a User class with an overridden equals method:
public class User {
private String username; // User's login name
private int age; // User's age
private String displayName; // Display name shown to others
public User(String username, int age, String displayName) {
this.username = username;
this.age = age;
this.displayName = displayName;
}
// Getters
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
// Comparison method
public boolean equals(User user) {
return this.username.equals(user.username) &&
this.age == user.age &&
this.displayName.equals(user.displayName);
}
}When using this class for comparison, you would implement it as follows:
public class Main {
public static void main(String[] args) {
User u1 = new User("john_doe", 25, "John");
User u2 = new User("john_doe", 25, "John");
if (u1.equals(u2)) {
System.out.println("Users are identical");
} else {
System.out.println("Users are different");
}
}
}However, a common issue arises when comparing String fields that might be null. For instance, in the equals method above, if username or displayName is null, it would throw a NullPointerException.
To handle null values safely, we should modify the implementation to use Objects.equals:
// Comparison method
public boolean equals(User user) {
return Objects.equals(this.username, user.username) &&
this.age == user.age &&
Objects.equals(this.displayName, user.displayName);
}The Objects.equals method provides null-safe comparison:
- If both parameters are null, Objects.equals(a, b) returns true
- If one parameter is null, it returns false
- If both parameters are non-null, it calls a.equals(b)