这就是我目前的方法:
//this method should check if the pokemon are equal//
public boolean equals(Pokemon other){
boolean equality;
if (**XXXXX** == other)
equality = true;
else
equality = false;
return equality;
}
所以这应该比较两个对象,但我的问题是如何调用该方法应用于的对象?例如,主代码应该将此equals方法应用于Pokemon a,它看起来像:
if (a.equals(other))
System.out.println("Pokemon are equal!");
如何输入或调用“a”(应用该方法的对象)到我的方法中,以便将它们相等?因为当我将代码中的 XXXXX 替换为:
if (Pokemon == other)
equality = true;
我收到错误:
Pokemon.java:130: error: cannot find symbol
if ( Pokemon == other)
^
symbol: variable Pokemon
location: class Pokemon
答案 0 :(得分:2)
由于您在对象.equals()
上调用了a
,因此该方法会以a
作为其上下文执行,这意味着this
关键字将引用a
在该方法的内部,就像在任何其他对象上调用的任何其他方法一样。
另外,请谨慎使用==
。这将看两个引用是否引用内存中相同的对象。这不仅仅是你想要的。您更有可能想要检查两个Pokemon对象上的各个成员变量,看看那些变量是否相等,然后如果它们返回true
以表明两个Pokemon对象确实相等。你选择的变量取决于你和你的两个口袋妖怪“相等”的标准。
通常,在==
实现的开头会有一个.equals()
检查,因为如果它是真的,那么该方法可以立即返回true,因为引用指的是完全相同的对象在记忆中。如果==
为false,那么您可以继续检查成员变量或您用于计算相等性的任何其他条件。
另请注意,重载 .equals()
方法,方法是为其参数签名提供Pokemon
类型的引用,而不是类型Object
。如果您想真正覆盖基本Object.equals()
方法,您需要执行以下操作:
public boolean equals(Object other) {
// Comparisons
}
如果要使用特定于other
类的方法和成员变量,则需要将Pokemon
强制转换为instanceof
对象(并使用Pokemon
)。如果您希望其他使用.equals()
的JDK(甚至您自己的)代码调用自定义.equals()
方法而不是基本Object.equals()
方法,则需要此覆盖。
答案 1 :(得分:1)
你应该在你的Pokemon类中覆盖Object提供的equals方法,如下所示:
@Override
public boolean equals(Object o)
{
// check if the "addresses" of o and this object are the same
if (this == o)
return true;
// check if o is of instance Pokemon
else if (o instanceof Pokemon)
{
// need to convert Object to Pokemon - it is save as we already know that
// the o is actually a Pokemon instance
Pokemon p = (Pokemon)o;
// compare fields of o with fields of this instance
if ((this.someField.equals(p.someField)
&& (....))
return true;
}
return false;
}
这里equals方法首先检查两个对象是否引用同一个实例,如果不是,它检查o是否是实例Pokemon,然后比较你需要识别两个对象是否相等的每个字段。
但请注意,此示例不完整,因为我不知道您为Pokemon类定义了哪些字段。当重写equals()时,最好还要覆盖public int hashCode()
- 在这里你应该在返回的hashCode()中包含你在equals中比较的每个字段。进一步阅读:http://www.xyzws.com/javafaq/why-always-override-hashcode-if-overriding-equals/20 http://www.javaranch.com/journal/2002/10/equalhash.html
答案 2 :(得分:0)
这就是this
关键字的作用。