2012-11-02 49 views
1

这是相同问题的更新,部分解决。对象属性不一样

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 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和setters。

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

自当可以'new'和'default'被用作字段名? – jlordo

+0

你的代码甚至不会编译......你正在使用新的和默认的变量名称 – PermGenError

回答

2

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

默认等于比较发生在==是参考平等。 你需要重写equalshashcode

Object#equals

的Java的文档等于Object类的方法实现对象上差别可能性最大的相等关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x == y的值为true)时,此方法返回true。

请注意,无论何时重写此方法,通常都需要重写hashCode方法,以便维护hashCode方法的一般约定,该方法声明相等对象必须具有相同的哈希代码。

样品Implementaion:

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保留关键字。您不能为保留关键字定义变量名称。


参考文献:

+0

你能告诉我如何在另一个类中调用equals方法并打印出日志中的结果。谢谢 – theJava

+0

'int'的默认值是0,这就是为什么你有'size,new和default'的值。你打电话的方式是好的。 –

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

重写等于的hashCode在你的班级列表类的方法。你可以在Eclipse中通过右击java文件 - >源代码 - >生成hashCode()和equals()来完成这项工作。

1

Java中的对象相等不是由对象的默认状态决定的 - 每个实例与其他实例不同。

您将不得不重写equals方法,使其返回true,具体取决于对象状态。

正确执行equals可能不那么直接。请查阅 API docs for the equals method获取实施建议。