我正在尝试为对象编写一个equals方法,以比较它们的字段
并在相等时返回true。
private int x, y, direction;
private Color color;
public boolean equals(Ghost other){
if (this.x == other.x && this.y == other.y &&
this.direction == other.direction && this.color == other.color)
return true;
else
return false;
}
这可能是什么问题?
由于color 似乎是一个Color,所以是一个类,因此是一个引用类型,这意味着您需要使用它们equals()来比较颜色。
if (/* ... && */ this.color.equals(other.color)) {
如注释中所述,==用于比较引用类型实际上是比较Java中的内存地址。仅true当它们都
引用内存中的同一对象时,它才会返回。
akf指出,您需要Object
为参数使用基类,否则,您不会覆盖Object.equals()
,而是实际上将其重载,即提供了一种不同的调用同名方法的方法。如果您偶然偶然传递了一个完全不同的类的对象,则可能会发生意外的行为(尽管如果它们属于
不同的类,则仍然会false正确返回)。
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Ghost))
return false;
// Cast Object to Ghost so the comparison below will work
Ghost other = (Ghost) obj;
return this.x == other.x
&& this.y == other.y
&& this.direction == other.direction
&& this.color.equals(other.color);
}
本文向大家介绍JavaScript比较两个对象是否相等的方法,包括了JavaScript比较两个对象是否相等的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript比较两个对象是否相等的方法。分享给大家供大家参考。具体如下: 在Python中可以通过cmp()内建函数来比较两个对象所包涵的数据是否相等(数组、序列、字典)。但是在javascript语言中并没有相关的实现。
JavaScript 在Object对象上面,提供了很多相关方法,处理面向对象编程的相关操作。本章介绍这些方法。 Object.getPrototypeOf() Object.getPrototypeOf方法返回参数对象的原型。这是获取原型对象的标准方法。 var F = function () {}; var f = new F(); Object.getPrototypeOf(f) === F
问题内容: 如何处理由hibernate管理的Java对象的对象相等性?他们在《hibernate的行动》一书中说,人们应该更青睐商务钥匙而不是代理钥匙。 大多数时候,我没有业务密钥。想想映射到一个人的地址。地址保存在Set中,并显示在Wicket RefreshingView中(使用ReuseIfEquals策略)。 我可以使用代理ID或使用equals()和hashCode()函数中的所有字段
问题内容: 据我了解(如果我错了,请纠正我),Hibernate使用对象引用来检查对象的相等性。当Hibernate识别同一数据库记录中有多个对象附加时,它将引发以下异常。 我的问题是,Hibernate是否使用方法检查对象是否相等(默认的equal方法使用对象引用)?如果为true,则重写的方法会改变Hibernate的行为吗? 注意:我的问题不是关于Hibernate持久对象中的实现或方法问题
问题内容: 我有上述2个类(POJO),它们都是绝对相同的(除了课程名称),我将它们添加到两个数组列表:aListA和aListB。我需要比较两个对象是否相同。如果它们相同,则需要将它们添加到另一个列表(commonList)中,如果它们恰好是不同的,则需要将它们添加到另一个列表(differentList)中。我写了以下代码: 我的问题是,即使两个不同POJO中的数据(变量,firstId和se
我收到以下错误: 对于我的Junit测试中的这行代码,请注意,