不一定是这样。例如,如果您查看 JDK 中的集合,它们会使用不那么严格的相等定义。下面的代码两次输出“true”。最后,这是合同和文件的问题。
equals
List 中的合同(重点是我的):
比较指定对象与此列表是否相等。当且仅当指定对象也是一个列表时返回 true,两个列表具有相同的大小,并且两个列表中所有对应的元素对都相等。(如果 (e1==null ? e2==null : e1.equals(e2)) 两个元素 e1 和 e2 相等。)换句话说,如果两个列表以相同的顺序包含相同的元素,则它们被定义为相等. 此定义确保 equals 方法在 List 接口的不同实现中正常工作。
请注意,只要所有实现的类都List
遵守该合同,它就不会违反反身性要求。
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
list1.add("a");
List<String> list2 = new LinkedList<String>();
list2.add("a");
List<String> list3 = Arrays.asList("a");
System.out.println("arraylist = linkedlist? " + list1.equals(list2));
System.out.println("arraylist = Arrays.aslit? " + list1.equals(list3));
}