【问题标题】:Contains method works but equals fails java包含方法有效但等于失败java
【发布时间】:2021-04-08 20:24:00
【问题描述】:

我在一篇文章中读到 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 方法如何确定对象是否存在?

【问题讨论】:

  • employeeList.add(employee); -> employeeList.contains(employee) == true.
  • 不,我没有重写 equals 和 hashcode 方法。

标签: java methods equals contains


【解决方案1】:

如果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方法。

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2013-05-06
    • 2011-05-17
    • 2011-03-20
    • 2013-08-21
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多