-3

我已经坚持了一段时间了,实际上我有 2 个对象,根据我的说法是相同的,我已经覆盖了 hashCode 方法来为两者创建相等的哈希码,仍然当我使用“==”或比较它们是否相等时对象的等于(也使用“==”),它返回false给我,下面的场景应该完全解释:::

1)HashCode-->-626561382 AND 2)HashCode--->-626561382  
1)IdentityHashCode-->19640463
2)IdentityHashCode-->22330755  
1)Bean1=beans.OrdersBean@daa76e9a  AND 2)Bean2=beans.OrdersBean@daa76e9a  
Check MySelf for(==)-->false  
Check Object's Equals()-->false

请解释一下为什么会这样????

4

5 回答 5

10

==运算符比较java中对象的引用(内存位置)...

如果你比较对象然后使用.equals()

if(obj1.equals(obj2)){

}
于 2012-07-27T12:56:44.950 回答
4

要比较两个对象的相等值,您需要重写该equals方法。

其他人提到的==运算符比较引用(即它是完全相同的对象)

解释

如果您以同卵双胞胎 Ben 和 Adam 为例,==在比较两者时使用 an 将返回 false,因为 Ben 不是 Adam(即使它们看起来相同),如果您使用.equals并且比较基于外观,那么这将返回 true .

于 2012-07-27T12:57:51.393 回答
3

在Java==中用于比较引用。要评估两个对象是否等效,请使用equals.

注意如果您必须比较自定义对象,请考虑equals根据您的等效标准在您的类中覆盖。

于 2012-07-27T12:57:35.763 回答
1

.equals从 parent的方法覆盖Object,这是为了“更深入”的比较,而==涉及检查引用(标识符)是否引用(以便对一个的更新适用于两者)相同的实例化。

于 2012-07-27T12:57:37.277 回答
0

1. 使用 '==' :

当你想检查两个引用变量是否引用同一个对象时,你应该在 java 中使用==运算符。例如 - (假设有一个名为Person的类)

Person person1 = new Person();
Person person2 = person1;

System.out.println(person1 == person2); // true

在这里,由于我们只使用了一次new,因此在堆内存中只创建了一个对象,我们将它分配给一个引用变量 -> person1。在第二个语句中,我们将 person1 分配给 person2。所以实际上内存中只有一个对象,但 person1 和 person2 都指的是同一个对象。

[简而言之,我们可以说,类似于原语,== 比较变量中的值,在引用变量的情况下是实际对象的内存地址]。

2. 使用 '.equals()' :

当您想检查两个对象是否有意义相等时,请使用 .equals() 方法。例如 -

Person person1 = new Person();
Person person2 = new Person();

System.out.println(person1.equals(person2)); // false

在这里,我们完全创建了两个不同的对象,因此它们在意义上并不相等。因此 equals() 方法将返回 false。

于 2013-01-07T16:32:17.967 回答