覆盖等于不工作

问题描述:

这是我的问题: 当我尝试重写“我的类”的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:他们应该是平等的,我用不同的方式检查了很多次所以这不是问题,我已经测试此代码很多次,发现问题是等于不覆盖;)

+4

你看过正在返回的对象的内容吗?此外,这些字段似乎是对象,您应该将它们与'equals()'而不是'=='进行比较。 – 2013-04-11 19:09:26

+0

你确定你的代码是在等于加法后重新编译的吗? – danieln 2013-04-11 19:10:30

+0

我假设名称和姓氏是字符串,所以你需要使用.equals而不是==作为@AndrewLogvinov的建议。除此之外,你是否在Matricola上实现了平等? – 2013-04-11 19:10:45

这很难说没有更多的信息,但现在看来,你的MatricolaNameSurname字段Object S,可能String秒。在这种情况下,您应该像这样比较它们:

return Matricola.equals(s.Matricola) && Name.equals(s.Name) && Surname.equals(s.Surname); 

否则,您是比较引用。

+0

我深深地爱着你;)我很喜欢Java – Francesco 2013-04-11 19:17:25

+1

很有趣,你想重写一个'equals()'方法,然后使用'=='。 – 2013-04-11 19:19:44

+0

它比有趣@SotiriosDelimanolis更愚蠢,我完全知道它! :P – Francesco 2013-04-11 19:23:25

比较字符串,你应该使用等于