2012-11-02 50 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獲取實施建議。