包含方法有效但 equals 失败 java
Contains method works but equals fails java
我在一篇文章中读到 java contains 方法使用 indexOf 方法,该方法在内部使用 equals 方法检查对象是否存在于字符串中。
所以我有一个代码,但我没有覆盖 Employee class 的 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 方法,为什么 returns 为真?
由于 equals 方法默认检查引用相等性,contains 方法如何确定对象是否存在?
Why does the contains method returns true if it uses equals method internally?
当两个对象引用同一对象时,equals
的默认行为将 return 为真。这就是您的代码中发生的事情。
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.
最后两次调用 return true,你必须覆盖 equals 和 hashCode 方法。
我在一篇文章中读到 java contains 方法使用 indexOf 方法,该方法在内部使用 equals 方法检查对象是否存在于字符串中。
所以我有一个代码,但我没有覆盖 Employee class 的 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 方法,为什么 returns 为真? 由于 equals 方法默认检查引用相等性,contains 方法如何确定对象是否存在?
Why does the contains method returns true if it uses equals method internally?
当两个对象引用同一对象时,equals
的默认行为将 return 为真。这就是您的代码中发生的事情。
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.
最后两次调用 return true,你必须覆盖 equals 和 hashCode 方法。