重写 Java 中的 equals() 方法进行对象比较
在 Java 中,equals() 方法允许您确定两个对象是否相同是平等的。默认情况下,equals() 比较对象引用,这并不总是所需的行为。重写 equals() 方法使您能够定义自己的比较逻辑。
场景:
您想要重写 People 类中的 equals() 方法,该类具有两个数据字段:姓名和年龄。您的目标是根据姓名和年龄来比较人物对象。
自定义 equals() 方法:
要覆盖 equals() 方法,您可以在People 类:
public boolean equals(People other) { // Null check and class check if (other == null || getClass() != other.getClass()) { return false; } // Downcast to People People otherPeople = (People) other; // Compare fields using == for primitive types (age) and equals() for objects (name) return name.equals(otherPeople.name) && age == otherPeople.age; }
修复原始类型比较:
原始代码尝试使用equals()来比较age字段,这是一个原始类型。基本类型有自己的相等比较运算符(在本例中为 ==)。修改age.equals(other.age)为age == other.age可以解决这个问题。
使用示例:
在Main类中,一个Person的ArrayList对象被创建。 equals() 方法用于比较人和打印结果:
ArrayList<Person> people = new ArrayList<>(); people.add(new Person("Subash Adhikari", 28)); // ... // Compare people objects 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)); // Print comparison result System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName()); System.out.println(check); } }
输出:
程序会打印比较的人是否相等。例如:
-- Subash Adhikari - VS - K false -- Subash Adhikari - VS - StackOverflow false -- Subash Adhikari - VS - Subash Adhikari true
以上是如何重写Java中的equals()方法以进行准确的对象比较?的详细内容。更多信息请关注PHP中文网其他相关文章!