What does equals(Object obj) do?

后端 未结 7 816
天涯浪人
天涯浪人 2020-12-02 21:23

I´ve often found an equals method in different places. What does it actually do? Is it important that we have to have this in every class?

   public boolean          


        
相关标签:
7条回答
  • 2020-12-02 22:23

    By default, the Object class equals method invokes when we do not provide the implementation for our custom class. The Object class equals method compares the object using reference.

    i.e. a.equals(a); always returns true.

    If we are going to provide our own implementation then we will use certain steps for object equality.

        Reflexive:  a.equals(a) always returns true;
    
        Symmetric: if a.equals(b) is true then b.equals(a) should also be true.
    
        Transitive: If a.equals(b), b.equals(c) then a.equals(c) should be true/false according to previous 2 result.
    
        Consistent: a.equals(b) should be the same result without modifying the values of a and b.
    

    Note: default equals method check the reference i.e. == operator.

    Note: For any non-null reference value a, a.equals(null) should return false.

    public class ObjectEqualExample{
    
         public static void main(String []args){
            Employee e1 = new Employee(1, "A");
            Employee e2 = new Employee(1, "A");
    
            // if we are using equals method then It should follow the some properties such as Reflexive, Symmetric, Transitive, and constistent
            /* 
            Reflexive:  a.equals(a) always returns true;
            Symmetric: if a.equals(b) is true then b.equals(a) should also be true.
            Transitive: If a.equals(b), b.equals(c) then a.equals(c) should be true/false according to previous 2 result.
    
            Consistent: a.equals(b) should be the same result without modifying the values of a and b.
    
            Note: default equals method check the reference i.e. == operator.
            Note: For any non-null reference value a, a.equals(null) should return false
            */
            System.out.println(e1.equals(e1));
            System.out.println(e1.equals(e2));
         }
    }
    
    class Employee {
        private int id;
        private String name;
    
        @Override
        public String toString() {
            return "{id ="+id+", name = "+name+"} ";
        }
    
        @Override
        public boolean equals(Object o) {
            // now check the referenc of both object
            if(this == o) return true;
    
            // check the type of class
            if(o == null || o.getClass() != this.getClass()) return false;
    
            // now compare the value
            Employee employee = (Employee)o;
            if(employee.id == this.id && employee.name.equals(this.name)) {
                return true; 
            } else return false;
        }
    
        public int hashCode() {
             // here we are using id. We can also use other logic such as prime number addition or memory address.
            return id;
        }
    
        public Employee(int id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    }
    
    0 讨论(0)
提交回复
热议问题