为什么我的equals方法无法识别对象变量?

时间:2016-01-25 00:30:52

标签: java equals

我只是想写一个比较学生姓名和部分的equals方法。如果名称和部分相同,则equals方法应该打印为true。否则它应该打印错误。

以下是我到目前为止的情况。

public class Student {

    private String name;
    private int section;

    public Student(String name, int section) {
        this.name = name;
        this.section = section;
    }

    public boolean equals(Object y) {

        if (this.name.equals(y.name) && this.section.equals(y.section)) {
            return true;    
        }
        else {
            return false;
        }
    }
}

错误在于y.namey.section。 Eclipse告诉我namesection无法解析为字段。

我的问题是,有人可以告诉我如何修复我的代码,以便我可以使用.equals()方法比较学生姓名和部分吗?

3 个答案:

答案 0 :(得分:5)

y

您的ObjectStudent,不一定是if (y == this) return true; if (y == null) return false; if (y instanceof Student){ Student s = (Student) y; // now you can access s.name and friends

你需要像

这样的代码
{{1}}

答案 1 :(得分:2)

嗯..我不确定,但我认为Eclipse也应该有这个功能 - '添加标准等于方法' - 使用它然后你的IDE生成绝对正确的等于方法......但它是关于编码速度优化。现在让我们讲述equals方法。通常equals方法契约自己定义transitiveness ...所以如果a等于b则b等于a。在这种情况下,建议有严格的限制:

public boolean equals(Object x) {
  if (x == this) {
    return true; // here we just fast go-out on same object
  }
  if (x == null || ~x.getClass().equals(this.getClass())) {
    return false; // in some cases here check `instanceof`
                  // but as I marked above - we should have
                  // much strict restriction
                  // in other ways we can fail on transitiveness
                  // with sub classes
  }
  Student student = (Student)y;
  return Objects.equals(name, student.name)
         && Objects.equals(section, student.section);
  //please note Objects - is new (java 8 API)
  //in order of old API usage you should check fields equality manaully.
}

答案 2 :(得分:1)

您缺少输入Cast Object to Student class;

@Override  // you should add that annotation
public boolean equals(Object y) {