这是同一个问题的更新,部分解决了。
Java - Object properties does not differ
int size = 0;
int new = 10;
int default = 100;
ClassList filterList = new ClassList();
filterList.setSize(size);
filterList.setNew(new);
filterList.setDefault(default);
//现在我正在创建ClassList的另一个实例。
ClassList newList = ClassList();
奇怪的是我的newList的值为size, new and default
,但值为0, 0 and 0
我尝试检查实例是否相同。
if(filterList .equals(newList)){
Log.d("Is it equal","True");
} else {
Log.d("Its Not equal","false");
}
我弄错了。
我的POJO课程很简单,有getter和setter。
public class ClassList{
private int size;
private int new;
private int default;
public int getPageSize() {
return size;
}
public void setPageSize(int size) {
this.size = size;
}
}
答案 0 :(得分:2)
int
的默认值为0
,这就是size, new and default
在新创建的实例上具有值0, 0 and 0
的原因
默认等于比较发生在==
上,即引用相等。
您需要覆盖equals
和hashcode
类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。
请注意,通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等的对象必须具有相等的哈希代码。
示例实施:
public static class ClassList {
private int size;
private int newValue;
private int defaultValue;
public int getPageSize() {
return size;
}
public void setPageSize(int size) {
this.size = size;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (!(obj instanceof ClassList))
return false;
ClassList c = (ClassList) obj;
return this.size == c.size && this.newValue == c.newValue
&& this.defaultValue == c.defaultValue;
}
@Override
public int hashCode() {
return Integer.valueOf(size).hashCode()
+ Integer.valueOf(newValue).hashCode()
+ Integer.valueOf(defaultValue).hashCode();
}
}
注意:new
和default
是java中的保留关键字。您无法为保留关键字定义变量名称。
参考文献:
答案 1 :(得分:1)
您需要覆盖自定义等同的equals
和hashcode
方法。
public class ClassList{
private int size;
private int new;
private int default;
public int getPageSize() {
return size;
}
public void setPageSize(int size) {
this.size = size;
}
public boolean equals(Object obj){
if (obj == null)
return false;
else if (obj == this)
return true;
else if (obj.getClass() != getClass())
return false;
else
return this.hashCode()==obj.hashCode();
}
public int hashCode(){
return size+new+default;
}
}
答案 2 :(得分:1)
覆盖ClassList类中的等于和 hashCode 方法。
您可以通过右键单击java文件来使用Eclipse执行此操作 - >来源 - >生成hashCode()和equals()。
答案 3 :(得分:1)
Java中的对象相等性不是由默认情况下对象字段的状态决定的 - 每个实例都与其他实例不同。
您必须覆盖equals
方法,使其返回true
,具体取决于对象状态。
正确实施equals
可能并不那么直接。抬头看看
API docs for the equals method了解实施建议。