覆盖等于不工作
问题描述:
这是我的问题: 当我尝试重写“我的类”的equals方法时,它根本不起作用,调用的函数是最抽象的一个,而不是“我的类”等于方法!下面是我的程序的一些代码: 这是“我的课”等于代码:覆盖等于不工作
@Override
public boolean equals(Object o){
StudentProxy s = (StudentProxy)o;
return Matricola == s.Matricola && Name == s.Name && Surname == s.Surname;
}
这里是我的断言失败:
@Test
public void storeStudentTest() throws Exception{
StudenteProxy s = new StudenteProxy(100, "Gianni", "Rosso", 27.2, 132);
DB.storeStudent(s);
StudentProxy ret = (StudentProxy)DB.retrieveStudentData(s.getMatricola());
DB.deleteStudent(s);
assertEquals(ret, s); // HERE ! ! !
}
我也试过用assertTrue:
assertTrue(ret.equals(s));
但我得到AssertionError;我认为这是由于最抽象的equals被调用所导致的,并且由于两个对象不是同一个对象,所以它给了我AssertionError消息。
任何想法? :(
PS:他们应该是平等的,我用不同的方式检查了很多次所以这不是问题,我已经测试此代码很多次,发现问题是等于不覆盖;)
答
这很难说没有更多的信息,但现在看来,你的Matricola
,Name
和Surname
字段Object
S,可能String
秒。在这种情况下,您应该像这样比较它们:
return Matricola.equals(s.Matricola) && Name.equals(s.Name) && Surname.equals(s.Surname);
否则,您是比较引用。
答
比较字符串,你应该使用等于
你看过正在返回的对象的内容吗?此外,这些字段似乎是对象,您应该将它们与'equals()'而不是'=='进行比较。 – 2013-04-11 19:09:26
你确定你的代码是在等于加法后重新编译的吗? – danieln 2013-04-11 19:10:30
我假设名称和姓氏是字符串,所以你需要使用.equals而不是==作为@AndrewLogvinov的建议。除此之外,你是否在Matricola上实现了平等? – 2013-04-11 19:10:45