Java 对象比较和带有对象键的哈希表

标签 java

假设我有一个 MyObject 类,它存储在 2 个不同的 ArrayList 中。如果从 2 个 ArrayList 中获取相同的对象,我将如何比较它们以检查它们是否相同?

我会做instance1 == instance2还是instance1.equals(instance2)?我很确定 == 运算符会查看指针位置,但如果我从 array1 获取实例 1,从 array2 获取实例 2,它们会返回不同的指针位置还是相同的?

与 Hashtable 相同:它是否将指针位置存储为键或实际对象?如果我有 2 个内容相同但实际上是不同对象的对象,它仍然有效吗?

谢谢

最佳答案

您需要区分对象引用

两个不同的列表(或者一般来说,任何表达式)可以是对同一对象的相同引用。例如:

MyObject x = new MyObject();
MyObject y = x;

这里,xy 是单独的变量,但它们都有引用同一对象的值。 == 将比较“引用同一个对象”。

如果您使用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

此处,xy 的值是对不同对象的引用,但这些对象被认为是相等的。

那么,您的 MyClass 类除了“对象标识”之外还有对象相等的概念吗?当您比较列表中存储的引用文献时,您对哪一方面感兴趣?

关于Java 对象比较和带有对象键的哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666482/

相关文章:

java - 如何限制 JSP/Servlet 中的每个用户角色?

java 。如何为油漆添加更多颜色?

java - 如何在 Java 8 中实现构建器模式?

java - android - eclipse android launch 卡在 100

java - 在android中实现Parcelable,onRestoreInstanceState没有被调用

java - 如何在jxpath中使用text()

java - java编译器会优化基于静态变量条件化的静态函数吗?

java - Android - Spinner 异步下载文件不保存

java - Android Stock 电子邮件应用程序不想与 pop3 服务器一起使用

java - 无法解析自定义日期格式。 ( java )