Comparing Objects in Java: equals() vs Objects.equals()

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)

Tags: java equals Objects.equals Object Comparison Null Safety

Posted on Tue, 19 May 2026 00:26:22 +0000 by ColinP