对象属性不一样

时间:2012-11-02 11:29:09

标签: java

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

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

4 个答案:

答案 0 :(得分:2)

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

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

来自Object#equals

的Java文档
  

类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();
    }
}

注意:newdefault是java中的保留关键字。您无法为保留关键字定义变量名称。


参考文献:

答案 1 :(得分: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;
    }
}

答案 2 :(得分:1)

覆盖ClassList类中的等于 hashCode 方法。

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

答案 3 :(得分:1)

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

您必须覆盖equals方法,使其返回true,具体取决于对象状态。

正确实施equals可能并不那么直接。抬头看看 API docs for the equals method了解实施建议。