contains方法工作但equals失败

qf9go6mv  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(287)

我在一篇文章中读到java contains method使用indexof method,indexof method在内部使用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方法如何确定对象是否存在?

9jyewag0

9jyewag01#

为什么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));

最后一行遍历列表中的每个员工,并调用其上的equals。当它遇到约翰时,就像是在检查 employee.equals(employee) 这是真的。
要使最后两个调用返回true,必须重写equals和hashcode方法。

相关问题