这是我的问题: 当我尝试覆盖“我的类”的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消息。
任何想法??? :(
P.S。:它们应该是等于我已经用不同的方式检查了很多次,所以这不是问题,我已经多次测试了这段代码,发现问题是equals没有覆盖;)
答案 0 :(得分:7)
如果没有更多信息,很难说清楚,但您的Matricola
,Name
和Surname
字段似乎是Object
,可能是String
。在这种情况下,你应该像这样比较它们:
return Matricola.equals(s.Matricola) && Name.equals(s.Name) && Surname.equals(s.Surname);
否则您正在比较参考文献。
答案 1 :(得分:0)
用于比较String,你应该使用等于