我正在编写应用程序,并且在某些时候我必须比较两个arraylist或两个对象,我定义了一个名为Article的类并编写此代码来比较两篇文章
public boolean aredifferent(){
Article art1 = new Article();
art1.setBm(null);
art1.setDesc("he");
art1.setImagelink("www");
art1.setLink("www");
art1.setTitle("ti");
Article art2 = new Article();
art2.setBm(null);
art2.setDesc("he");
art2.setImagelink("www");
art2.setLink("www");
art2.setTitle("ti");
boolean diff;
if(art1.equals(art2)){
diff = false;
}else{
diff = true;
}
return diff;
}
问题我已经知道这种方法正在回归,我不明白为什么。有任何想法吗?是否有不同的方法来比较Android中的对象?
谢谢
答案 0 :(得分:0)
检查该类的equals()
实施方式,最好的猜测是您没有覆盖equals()
方法,而是依赖于Object
的实现
答案 1 :(得分:0)
我假设您没有为Article类定义自定义“equals”方法?如果是这样,art1.equals(art2)
始终返回false
的原因是因为Java中的默认equal
方法通过检查两个对象在内存中是否具有相同的地址来工作。
由于您要创建两个不同的Article
个实例,因此它们显然不会共享相同的内存地址,因此equals
将始终返回false
。您可以通过执行类似art1.equals(art1)
的操作来对此进行测试 - 在这种情况下,您的方法将按预期运行。
要解决此问题,您需要覆盖equals
类中的Article
方法,并创建一个显式检查Article类中字段的新版本。 (您还应该定义使用相同字段的hashCode
的自定义版本。)