假设我有一个 MyObject
类,它存储在 2 个不同的 ArrayList
中。如果从 2 个 ArrayList 中获取相同的对象,我将如何比较它们以检查它们是否相同?
我会做instance1 == instance2
还是instance1.equals(instance2)
?我很确定 == 运算符会查看指针位置,但如果我从 array1 获取实例 1,从 array2 获取实例 2,它们会返回不同的指针位置还是相同的?
与 Hashtable 相同:它是否将指针位置存储为键或实际对象?如果我有 2 个内容相同但实际上是不同对象的对象,它仍然有效吗?
谢谢
最佳答案
您需要区分对象和引用。
两个不同的列表(或者一般来说,任何表达式)可以是对同一对象的相同引用。例如:
MyObject x = new MyObject();
MyObject y = x;
这里,x
和 y
是单独的变量,但它们都有引用同一对象的值。 ==
将比较“引用同一个对象”。
如果您使用equals
,那么(假设您已覆盖MyObject
中的equals
)两个不同对象可以仍然是平等的。
例如:
Integer x = new Integer(1);
Integer y = new Integer(1);
System.out.println(x == y); // False
System.out.println(x.equals(y)); // True
此处,x
和 y
的值是对不同对象的引用,但这些对象被认为是相等的。
那么,您的 MyClass
类除了“对象标识”之外还有对象相等的概念吗?当您比较列表中存储的引用文献时,您对哪一方面感兴趣?
关于Java 对象比较和带有对象键的哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666482/