javaoverridingequals

How to override equals method in Java


I am trying to override equals method in Java. I have a class People which basically has 2 data fields name and age. Now I want to override equals method so that I can check between 2 People objects.

My code is as follows

public boolean equals(People other){
    boolean result;
    if((other == null) || (getClass() != other.getClass())){
        result = false;
    } // end if
    else{
        People otherPeople = (People)other;
        result = name.equals(other.name) &&  age.equals(other.age);
    } // end else

    return result;
} // end equals

But when I write age.equals(other.age) it gives me error as equals method can only compare String and age is Integer.

Solution

I used == operator as suggested and my problem is solved.


Solution

  • //Written by K@stackoverflow
    public class Main {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            ArrayList<Person> people = new ArrayList<Person>();
            people.add(new Person("Subash Adhikari", 28));
            people.add(new Person("K", 28));
            people.add(new Person("StackOverflow", 4));
            people.add(new Person("Subash Adhikari", 28));
    
            for (int i = 0; i < people.size() - 1; i++) {
                for (int y = i + 1; y <= people.size() - 1; y++) {
                    boolean check = people.get(i).equals(people.get(y));
    
                    System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
                    System.out.println(check);
                }
            }
        }
    }
    
    //written by K@stackoverflow
    public class Person {
        private String name;
        private int age;
    
        public Person(String name, int age){
            this.name = name;
            this.age = age;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
    
            if (obj.getClass() != this.getClass()) {
                return false;
            }
    
            final Person other = (Person) obj;
            if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
                return false;
            }
    
            if (this.age != other.age) {
                return false;
            }
    
            return true;
        }
    
        @Override
        public int hashCode() {
            int hash = 3;
            hash = 53 * hash + (this.name != null ? this.name.hashCode() : 0);
            hash = 53 * hash + this.age;
            return hash;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    Output:

    run:

    -- Subash Adhikari - VS - K false

    -- Subash Adhikari - VS - StackOverflow false

    -- Subash Adhikari - VS - Subash Adhikari true

    -- K - VS - StackOverflow false

    -- K - VS - Subash Adhikari false

    -- StackOverflow - VS - Subash Adhikari false

    -- BUILD SUCCESSFUL (total time: 0 seconds)