1

这是同一问题的更新,已部分解决。

Java - 对象属性没有区别

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;
    }
}
4

4 回答 4

2

默认值int就是0这就是为什么在新创建的实例上size, new and default有值0, 0 and 0

默认等于比较发生在==引用相等上。您将需要覆盖equalshashcode

来自Object#equals的 Java 文档

Object 类的 equals 方法实现了对象上最有区别的可能等价关系;也就是说,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象(x == y 的值为 true)时,此方法才返回 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();
    }
}

注意:newanddefault是 java 中的保留关键字。您不能为保留关键字定义变量名称。


参考:

于 2012-11-02T11:32:27.817 回答
1

覆盖ClassList 类中的equalshashCode方法。

您可以在 Eclipse 中通过右键单击 java 文件 -> 源 -> 生成 hashCode() 和 equals() 来执行此操作。

于 2012-11-02T11:32:08.840 回答
1

Java 中的对象相等性不是由默认情况下对象字段的状态决定的——每个实例都不同于其他实例。

您必须重写该equals方法以使其true根据对象状态返回。

正确实施equals可能并不那么简单。在 API 文档中查找 equals 方法以获取实施建议。

于 2012-11-02T11:32:10.567 回答
1

您需要重写 equalshashcode自定义相等的方法。

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;
    }
}
于 2012-11-02T11:31:20.833 回答