Java 相等(Obj)测试
我正在测试这两个对象是否相等,但它返回false。有人能给我解释一下为什么会这样吗?谢谢Java 相等(Obj)测试,java,Java,我正在测试这两个对象是否相等,但它返回false。有人能给我解释一下为什么会这样吗?谢谢 public boolean equals(Object obj) { if(obj instanceof SparsePolynomial) { return true; } return false; } @Test public void testEqualsObj() { ArrayList<Integer> k = new ArrayList&
public boolean equals(Object obj) {
if(obj instanceof SparsePolynomial)
{
return true;
}
return false;
}
@Test
public void testEqualsObj()
{
ArrayList<Integer> k = new ArrayList<Integer>();
k.add(1);
k.add(3);
SparsePolynomial d = new SparsePolynomial(k);
ArrayList<Integer> k2 = new ArrayList<Integer>();
k.add(1);
k.add(3);
SparsePolynomial d2 = new SparsePolynomial(k2);
Assert.assertTrue(d.equals(d2));
}
公共布尔等于(对象obj){
if(SparsePolynomial的obj实例)
{
返回true;
}
返回false;
}
@试验
public void testEqualsObj()
{
ArrayList k=新的ArrayList();
k、 增加(1);
k、 增加(3);
SparsePolynomial d=新SparsePolynomial(k);
ArrayList k2=新的ArrayList();
k、 增加(1);
k、 增加(3);
SparsePolynomial d2=新SparsePolynomial(k2);
Assert.assertTrue(d等于(d2));
}
试试Assert.assertTrue(d.equals(d2))代码>没有足够的信息可以确定,但我怀疑:
equals
未定义为SparsePolynomial
的方法。也许你已经在超类上定义了它。。。或者一个无关的类
- 更改某些代码后,您尚未重新编译所有相关类
编辑
最好使用@Override
注释来标记希望equals
方法重写(或实现)在超类或接口中定义的方法。(这里不会有任何区别,但它会告诉您是否在方法签名方面犯了错误。)
您对用于测试的Assert方法所做的更改应该不会对结果产生任何影响
你展示的等于方法显然是假的。它只是测试obj
参数的类型,并忽略其状态。如前所述,每次对一个SparsePolynomial
实例与另一个实例进行测试时,它都应该返回true
我试过你的代码,测试通过了
您可以在这里找到我使用的确切测试用例:
public class SparsePolynomialTest {
public static class SparsePolynomial {
private List<Integer> list;
public SparsePolynomial(List<Integer> list) {
this.list = list;
}
public boolean equals(Object obj) {
if (obj instanceof SparsePolynomial) {
return true;
}
return false;
}
}
@Test
public void testEqualsSparse() {
ArrayList<Integer> k = new ArrayList<Integer>();
k.add(1);
k.add(3);
SparsePolynomial d = new SparsePolynomial(k);
ArrayList<Integer> k2 = new ArrayList<Integer>();
k2.add(1);
k2.add(3);
SparsePolynomial d2 = new SparsePolynomial(k2);
Assert.assertEquals(true, d.equals(d2));
}
}
public class SparsePolynomialTest{
公共静态类稀疏多项式{
私人名单;
公共SPARSEPLYNOMIAL(列表){
this.list=列表;
}
公共布尔等于(对象obj){
if(SparsePolynomial的obj实例){
返回true;
}
返回false;
}
}
@试验
public void testequalsparse(){
ArrayList k=新的ArrayList();
k、 增加(1);
k、 增加(3);
SparsePolynomial d=新SparsePolynomial(k);
ArrayList k2=新的ArrayList();
k2.添加(1);
k2.添加(3);
SparsePolynomial d2=新SparsePolynomial(k2);
Assert.assertEquals(真,d等于(d2));
}
}
它在这里工作得非常好。你确定你给我们看了所有的东西吗?那是错误的。我更新了它。Java 2出人意料的版本?a) 将等于
注释为@override
。b) assertEquals(d,d2)
可以检查是否相等。不应造成功能差异。使用assertEquals
不应导致测试失败。它将使用equals
来比较两个布尔对象。这很难看,但应该有用。我也这么想。问题是遗漏了一些关键的细节。我只是好奇,如果你打算写一些代码并发布,为什么不直接发布到你的答案中呢?下个月这个粘贴箱将不复存在,你的答案要么就没那么有用,要么就没用了。@Monkey:我以为这段代码没有带来任何新东西,它会污染这里的问题页面。因此,我使用了外部资源。顺便说一句,我在pastebin.com上查过“永远保持”或其他什么名字。