包含方法有效但等于失败 java

问题描述

我在一篇文章中读到 java contains 方法使用 indexOf 方法,该方法内部使用 equals 方法检查对象是否存在于字符串中。

所以我有一个代码并且我没有覆盖 Employee 类的 equals 方法

Employee employee = new Employee(1,"John");
    Employee employee2 = new Employee(1,"akshay");
    Employee employee3 = new Employee(1,"akshay");

    List<Employee> employeeList = new ArrayList<>();
    employeeList.add(employee3);
    employeeList.add(employee);
    

    System.out.println(employeeList.contains(employee)); // returns true
    System.out.println(employee3.equals(employee2));     // returns false
    System.out.println(employeeList.contains(new Employee(1,"akshay"))); // returns false

如果 contains 方法在内部使用 equals 方法,为什么会返回 true? 由于 equals 方法认检查引用相等性,contains 方法如何确定对象是否存在?

解决方法

如果 contains 方法在内部使用 equals 方法,为什么会返回 true?

当两个对象引用同一个对象时,equals 的默认行为将返回 true。这就是您的代码中发生的事情。

Employee employee = new Employee(1,"John");
....
List<Employee> employeeList = new ArrayList<>();
employeeList.add(employee);
....
System.out.println(employeeList.contains(employee)); 

最后一行遍历列表中的每个 Employee 并对其调用 equals。当它遇到 John 时,就像检查 employee.equals(employee) 是否为 true

对于返回 true 的最后两次调用,您必须覆盖 equalshashCode 方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...