Rumah  >  Artikel  >  Java  >  Program Java untuk membandingkan dua objek

Program Java untuk membandingkan dua objek

王林
王林ke hadapan
2023-08-31 15:45:121105semak imbas

Program Java untuk membandingkan dua objek

Pengenalan

Di Java, anda boleh menggunakan kaedah equals() untuk membandingkan objek, yang menentukan sama ada dua objek adalah sama berdasarkan sifat objek tersebut. Apabila membandingkan objek dalam Java, adalah sangat penting untuk mengatasi kaedah equals() dalam kelas untuk memastikan perbandingan adalah berdasarkan sifat yang diperlukan.

Program Java ini membandingkan dua objek jenis Person dengan mengatasi kaedah equals() berdasarkan nama dan atribut umurnya. Mula-mula gunakan kaedah equals() untuk menyemak sama ada objek tergolong dalam kelas yang sama, dan kemudian bandingkan atribut nama dan umur. Jika kedua-dua sifat sepadan, kaedah mengembalikan benar, menunjukkan bahawa objek adalah sama. Jika mana-mana sifat berbeza, kaedah mengembalikan palsu, menunjukkan bahawa objek tidak sama.

Kaedah

Terdapat dua kaedah standard

  • Gunakan kaedah equals()

    • Tidak bertudung

    • Gunakan tindanan

  • Gunakan kaedah hashCode() dan equals()

Contoh 1: Kaedah overriding equals()

Mengatasi kaedah equals() dalam kelas membenarkan perbandingan tersuai berdasarkan sifat objek.

Kaedah

  • Kami mula-mula mentakrifkan kelas Orang, yang mengandungi dua pembolehubah contoh peribadi: nama dan umur.

  • Kami mentakrifkan pembina untuk kelas Orang yang menerima nama dan umur dan memulakan pembolehubah tika dengan nilai ini.

  • Kami telah mengatasi kaedah equals() dalam kelas Person untuk membandingkan dua objek Person berdasarkan nama dan umur. Kaedah equals() menerima parameter Objek Kami mula-mula menyemak sama ada parameter itu tidak kosong dan merupakan contoh kelas Orang. Kami kemudian menukar objek itu kepada objek Orang dan membandingkan nama dan sifat umurnya dengan nama objek semasa dan sifat umur.

  • Dalam kaedah main(), kami mencipta dua objek Orang dengan nama dan nilai umur yang berbeza.

  • Kami memanggil kaedah equals() pada objek Orang pertama, menghantar objek Orang kedua sebagai parameter. Kaedah equals() mengembalikan nilai Boolean yang menunjukkan sama ada kedua-dua objek adalah sama.

  • Akhir sekali, kami menggunakan System.out.println() untuk mencetak hasil perbandingan ke konsol

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;
   }
}
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Dalam contoh ini, kami mencipta dua objek Orang dengan nama dan umur yang berbeza, kemudian memanggil kaedah yang sama dengan objek pertama untuk membandingkannya dengan objek kedua. kaedah sama ditakrifkan dalam kelas Orang dan menyemak sama ada kedua-dua objek mempunyai nama dan sifat umur yang sama. Akhirnya, kami mencetak hasil perbandingan ke konsol.

Output

Are the two objects equal? false

Contoh 2: Tidak mengatasi kaedah equals()

Kaedah equals() tidak ditindih, objek dibandingkan berdasarkan rujukannya dan bukannya sifat.

Kaedah

  • Kami mula-mula mentakrifkan kelas Orang, yang mengandungi dua pembolehubah contoh peribadi: nama dan umur.

  • Kami mentakrifkan pembina untuk kelas Orang yang menerima nama dan umur dan memulakan pembolehubah tika dengan nilai ini.

  • Dalam kaedah main(), kami mencipta dua objek Orang dengan nama dan nilai umur yang sama.

  • Kami memanggil kaedah equals() pada objek Orang pertama dan menghantar objek Orang kedua sebagai parameter. Memandangkan kami tidak mengatasi kaedah equals() dalam kelas Person, pelaksanaan lalai kaedah equals() yang diwarisi daripada kelas Object digunakan. Pelaksanaan menyemak sama ada kedua-dua objek adalah objek yang sama (iaitu mempunyai alamat memori yang sama) dan mengembalikan benar jika ia. Memandangkan objek person1 dan person2 mempunyai alamat memori yang berbeza, kaedah equals() mengembalikan false.

  • Akhir sekali, kami menggunakan System.out.println() untuk mencetak hasil perbandingan ke konsol.

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;
   }
}
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Dalam contoh ini, kami mencipta dua objek Orang dengan nama dan umur yang sama, kemudian memanggil kaedah sama untuk membandingkan objek pertama dengan objek kedua. Oleh kerana kami tidak mengatasi kaedah sama dalam kelas Orang, pelaksanaan lalai yang diwarisi daripada kelas Objek digunakan. Pelaksanaan ini menyemak sama ada kedua-dua objek adalah objek yang sama (iaitu mempunyai alamat memori yang sama) dan mengembalikan benar jika ya. Oleh kerana objek person1 dan person2 mempunyai alamat memori yang berbeza, kaedah equals mengembalikan palsu. Akhirnya, kami mencetak hasil perbandingan ke konsol.

Output

Are the two objects equal? false

Contoh 3: Menggunakan kaedah hashCode() dan equals()

Kaedah equals() tidak ditindih, objek dibandingkan berdasarkan rujukannya dan bukannya sifat.

Kaedah

  • Kami mencipta dua objek kelas Orang, orang1 dan orang2, dengan nama dan umur yang sama.

  • Kami kemudian memanggil kaedah hashCode() dan equals() pada person1.

  • Dalam kelas Orang, kami mengatasi kaedah hashCode() dan menggunakan kaedah Objects.hash() untuk menjana kod cincang berdasarkan nama dan atribut umur objek.

  • 然后我们重写equals()方法,根据它们的姓名和年龄属性来比较两个Person对象。该方法首先检查对象是否属于同一类,如果是,则使用Objects.equals()方法检查它们的姓名和年龄属性是否相等。

  • 在main()方法中,我们使用&&运算符通过hashCode()方法检查person1和person2的哈希码是否相同,并且通过equals()方法返回true。

  • 最后,我们打印出一个消息,指示这些对象是否相等。

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 using hashCode and equals methods
      boolean areEqual = person1.hashCode() == person2.hashCode() && 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 int hashCode() {
      return Objects.hash(name, age);
   }
    
   @Override
   public boolean equals(Object obj) {
      if (this == obj)
         return true;
      if (!(obj instanceof Person))
         return false;
      Person other = (Person) obj;
      return Objects.equals(name, other.name) && age == other.age;
   }
}

Explanation

的中文翻译为:

解释

在这个例子中,我们创建了两个具有相同姓名和年龄的Person对象,然后调用第一个对象的hashCode()和equals()方法来与第二个对象进行比较。

在Person类中,我们重写了hashCode()和equals()方法,以便根据它们的name和age属性来比较对象。hashCode()方法返回name和age属性的组合的哈希码,equals()方法检查对象是否属于同一类,并且具有相同的name和age属性。

最后,我们使用&&运算符来检查两个对象的哈希码是否相同,并且equals()方法是否返回true。如果两个条件都为true,我们打印出对象相等的信息。否则,我们打印出对象不相等的信息。

输出

The two person objects are equal

结论

  • 这个Java程序使用equals()方法来比较两个Person对象的属性,该方法已在Person类中被重写。

  • 该程序展示了定制对象比较的重要性,并突出了Java在实现自定义比较逻辑方面提供的灵活性。

Atas ialah kandungan terperinci Program Java untuk membandingkan dua objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam