Java程序比较两个对象


Java中比较对象,检查给定对象的属性或哈希值。如果两个对象的属性匹配,则它们相等。如果任何属性不同,则表示对象不相等。

注意:不要使用等号运算符 (==) 来比较对象,因为它只检查它们的内存位置。对象的比较应该基于属性而不是位置。

如何在Java中比较对象?

要在Java中比较两个对象,可以使用以下方法:

  • 通过重写equals()方法
  • 不重写equals()方法
  • 使用hashCode()和equals()方法

通过重写equals()方法

默认情况下,equals()方法只比较对象的内存位置,即它检查给定的对象是否引用同一个对象。但是,我们将重写此方法并在其中加入我们自己的逻辑来比较给定对象的属性。如果两个对象相同,则返回true,否则返回false。

示例

以下示例演示了如何通过重写equals()方法来比较两个对象。

public class ObjectComparator {
    
   public static void main(String[] args) {
        
      // Create two objects to compare
      Person person1 = new Person("Alice", 25);
      Person person2 = new Person("Bob", 30);
        
      // Compare the two objects
      boolean areEqual = person1.equals(person2);
      System.out.println("Are the two objects equal? " + areEqual);
   }
}

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 instanceof Person)) return false;
      Person otherPerson = (Person) obj;
      return this.name.equals(otherPerson.name) && this.age == otherPerson.age;
   }
}

运行上述代码后,将产生以下结果:

Are the two objects equal? false

不重写equals()方法

不重写equals()方法,对象将基于它们的引用进行比较,而不是它们的属性。

示例

在此示例中,我们演示了如何在不重写equals()方法的情况下比较两个对象。

public class ObjectComparator {
    
   public static void main(String[] args) {
        
      // Create two objects to compare
      Person person1 = new Person("Alice", 25);
      Person person2 = new Person("Alice", 25);
        
      // Compare the two objects
      boolean areEqual = person1.equals(person2);
      System.out.println("Are the two objects equal? " + areEqual);
   }
}

class Person {
    
   private String name;
   private int age;
    
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
}

执行此代码后,将给出以下输出:

Are the two objects equal? false

使用hashCode()和equals()方法

hashCode()方法返回对象的哈希码值。哈希码是为Java中的每个对象生成的整数值。如果根据equals()方法两个对象相等,则两个相似的对象返回相同的哈希值,否则返回不同的哈希值。

示例

在下面的示例中,我们使用hashCode()和equals()方法在Java中比较两个对象。

import java.util.*;
class Student {
  String name;
  int regd;
  Student(String name, int regd) { // Constructor
    this.name = name;
    this.regd = regd;
  }
  @Override
  public boolean equals(Object ob) { // overriding equals method
    if (this == ob) {
      return true;
    }
    if (ob == null || this.getClass() != ob.getClass()) {
      return false;
    }
    Student st = (Student) ob;
    // checking equality and returning values of name and regd of objects
    return this.name.equals(st.name) && this.regd == st.regd;
  }
  @Override
    public int hashCode() { // Overriding hashCode method
        return Objects.hash(name, regd);
    }
}
public class Main {
  public static void main(String[] args) {
    Student st1 = new Student("Ansh", 12105);
    Student st2 = new Student("Kumar", 11705);
    Student st3 = new Student("Ansh", 12105);
    if(st1.hashCode() == st2.hashCode()) { // checking hashcode value
        if(st1.equals(st2)) { // checking equality
            System.out.println("st1, st2 objects are same");
        }
    } else if(st1.hashCode() == st3.hashCode()) {
        if(st1.equals(st3)) {
            System.out.println("st1, st3 objects are same"); 
        }
    } else {
        System.out.println("All objects are different");
    }
  }
}

以下是上述代码的输出:

st1, st3 objects are same

更新于:2024年7月31日

745 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.