我在一篇文章中读到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方法如何确定对象是否存在?
1条答案
按热度按时间9jyewag01#
为什么contains方法在内部使用equals方法时返回true?
违约行为
equals
当两个对象都引用同一个对象时,将返回true。这就是代码中发生的事情。最后一行遍历列表中的每个员工,并调用其上的equals。当它遇到约翰时,就像是在检查
employee.equals(employee)
这是真的。要使最后两个调用返回true,必须重写equals和hashcode方法。