对象比较

时间:2013-10-23 06:49:31

标签: java object comparison boolean

您好我正在尝试编写Java比较,该比较采用名为MovieCard的当前对象,并将其与作为参数传递的另一个MovieCard进行比较。代码

boolean sameName(MovieCard movieCard) {

    if(this.MovieCard.equals(movieCard))


    return true;
} 

错误找不到符号 - 变量MovieCard

如果这有任何区别,那么在MovieCard构造函数之前我的类中会列出该检查。我也是初学者编程课程,所以我们不能使用Comparator,它需要包含它。

6 个答案:

答案 0 :(得分:2)

boolean sameName(MovieCard movieCard) {
    return this.equals(movieCard);
} 

答案 1 :(得分:1)

MovieCard是一个类,而不是变量。这就是编译器告诉你的内容。

if(this.MovieCard.equals(movieCard))
        ↑

您可能只需要编写this

另请注意,存在一条不会返回任何内容的路径,这不会编译。

你应该这样做:

boolean sameName(MovieCard movieCard) {
    return this.equals(movieCard);
}

boolean sameName(MovieCard movieCard) {
    if(this.equals(movieCard)) {
       return true;
    }
    return false;
} 

答案 2 :(得分:1)

如果您的MovieCard课程中存在此方法,那么只需this即可。

boolean sameName(MovieCard movieCard) {
    if(this.equals(movieCard)) {// this is enough. this.MovieCard is wrong, as there is no variable by that name.
        return true;
    }
    return false; // Since return true is a conditional return, but the method needs to return in any case.
}

您的方法的缩短版本将是

boolean sameName(MovieCard movieCard) {
    return this.equals(movieCard); // Returns the result of the comparison.
}

如果查看方法名称sameName(),看起来您想要比较类中的某个名称字段,而不是这样的对象。

boolean sameName(MovieCard movieCard) {
    return this.getName().equals(movieCard.getName()); // Returns the result of the name comparison.
    // But there is a possible NPE in the above statement.
}

答案 3 :(得分:1)

使用

boolean sameName(MovieCard movieCard) {
    if(this.equals(movieCard))
       return true;
} 

但似乎你的方法是检查两个对象是否具有相同的名称。如果是这样,那么你可以简单地使用

boolean sameName(MovieCard movieCard) {

    if(this.name.equals(movieCard.name))
         return true;
} 

假设name是成员变量(string)

答案 4 :(得分:1)

你必须写

boolean sameName(MovieCard movieCard) {
 if (this.equals(movieCard)){
            return true;
        } else{
            return false;
        }
}

因为this.MovieCard指向Moviecard类中的变量。

除了语法错误之外,您的equals实现不会执行任何其他默认实现

请记住if (this.equals(movieCard)){仅当movieCardthis指向同一参考时才会这样。

<强>因为,

java.lang.Object 提供的equals()类的默认实现比较内存位置,如果两个引用变量指向相同的内存位置,则只有return,即基本上它们是同一个对象。

我想您需要覆盖MovieCard类中的equals方法,以便比较MovieCard's的字段是否相同。

Prefers to read, How to essentially Ovveride equals.

您向错误的方向移动,请参阅上面链接中的示例,然后实现equals  以这种方式,如果MovieCard equals中的所有字段都传递给Object的字段。这将是您要求的实施。

一般来说,an example for comparing two Tiger Object's 等于此等等

@Override
  public boolean equals(Object object) {
    boolean result = false;
    if (object == null || object.getClass() != getClass()) {
      result = false;
    } else {
      Tiger tiger = (Tiger) object;
      if (this.color == tiger.getColor() //checking color and pattern same
          && this.stripePattern == tiger.getStripePattern()) {
        result = true;
      }
    }
    return result;
  }

答案 5 :(得分:0)

上面给出的所有答案都回答了你的问题,所以我也想补充一下。

  

请记住,调用的equals方法属于对象方法。所以你最好覆盖equals方法以满足你的程序需求。当你覆盖等于时,请确保你也覆盖hashcode方法..