0

这就是我目前的方法:

//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
4

3 回答 3

2

由于您正在调用.equals()object a,因此该方法a以其上下文执行,这意味着this关键字将引用a该方法的内部,就像在任何其他对象上调用的任何其他方法一样。

另外,使用时要小心==。这将查看这两个引用是否引用了内存中相同的确切对象。这不太可能只是您想要的。您更有可能希望检查两个 Pokemon 对象上的各种成员变量,以查看这些变量是否相等,然后返回它们是否true表明两个 Pokemon 对象确实相等。您选择的变量取决于您以及使两个口袋妖怪“相等”的标准。

通常,实际上会==在实现开始时进行检查.equals(),因为如果它为真,那么该方法可以立即返回真,因为引用指的是内存中完全相同的对象。如果==为假,那么您可以继续检查成员变量或任何其他用于计算相等性的标准。

另请注意,您通过为其参数签名提供 type 的引用而不是 type 来重载该方法。如果您想真正覆盖基本方法,您需要执行以下操作:.equals()PokemonObjectObject.equals()

public boolean equals(Object other) {
    // Comparisons
}

如果要使用特定于类的方法和成员变量,则需要强制other转换为Pokemon对象(并使用) 。如果您想要用于调用您的自定义方法的其他 JDK(甚至您自己的)代码,而不是基本方法,则需要此覆盖。instanceofPokemon.equals().equals()Object.equals()

于 2013-10-22T19:50:25.887 回答
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

于 2013-10-22T20:02:52.790 回答
0

这就是this关键字的作用。

于 2013-10-22T19:48:00.703 回答