2012-02-14 81 views
0

這篇文章是我以前的帖子延續這裏找到對象比較...第2部分

Object comparison for equality : JAVA

根據我收到的建議,我創建了下面的類,做了equals()方法, hashcode()覆蓋....使用Eclipse IDE的一切。但是,當我比較兩個不同的對象時,我仍然得到一個錯誤,它們使用存儲這些對象的ArrayList的contains()方法引用相同的類。我不知道我的實施過程中出了什麼問題。想幫助排除故障。

public class ClassA { 

private String firstId; 
private String secondId; 
/** 
* @return the firstId 
*/ 
public String getFirstId() { 
    return firstId; 
} 
/** 
* @param firstId the firstId to set 
*/ 
public void setFirstId(String firstId) { 
    this.firstId = firstId; 
} 
/** 
* @return the secondId 
*/ 
public String getSecondId() { 
    return secondId; 
} 
/** 
* @param secondId the secondId to set 
*/ 
public void setSecondId(String secondId) { 
    this.secondId = secondId; 
} 
/* (non-Javadoc) 
* @see java.lang.Object#hashCode() 
*/ 
public int hashCode() { 
    final int PRIME = 31; 
    int result = 1; 
    result = PRIME * result + ((firstId == null) ? 0 : firstId.hashCode()); 
    result = PRIME * result + ((secondId == null) ? 0 : secondId.hashCode()); 
    return result; 
} 
/* (non-Javadoc) 
* @see java.lang.Object#equals(java.lang.Object) 
*/ 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    final ClassA other = (ClassA) obj; 
    if (firstId == null) { 
     if (other.firstId != null) 
      return false; 
    } else if (!firstId.equals(other.firstId)) 
     return false; 
    if (secondId == null) { 
     if (other.secondId != null) 
      return false; 
    } else if (!secondId.equals(other.secondId)) 
     return false; 
    return true; 
} 

} 

ClassA clsA1 = new ClassA(); 
ClassA clsA2 = new ClassA(); 

clsA1.setFirstId("value1"); 
clsA1.setSecondId("value2"); 

clsA2.setFirstId("value1"); 
clsA2.setSecondId("value2"); 

ArrayList a1 = new ArrayList(); 
ArrayList a2 = new ArrayList(); 

a1.add(clsA1); 
a2.add(clsA2); 

if(a1.contains(clsA2) 
{ 
    System.out.println("Success"); 
} 
else 
{ 
    System.out.println("Failure"); 
} 

我得到的結果爲「失敗」

回答

3

我在Netbeans中測試了您的代碼,我獲得了成功。有一個錯字缺少「)」在 如果(a1.contains(clsA2)

「當然失敗。您的ID字符串是在您的測試代碼空,equals方法寫入返回,如果此假如果firstId和secondId都爲null,或者其中任何一個爲null,而另一個匹配,則應該允許相等「 是不是真的正確

如果兩個ID均爲空,則equals將返回true 。只有當一個ID不是。

+0

對不起,,,我已經更新了我的代碼。兩個對象屬性都有相同的值..但我得到失敗...... – Raghu 2012-02-14 17:34:42

+0

我現在看到的唯一的東西就是缺少的「)」,我希望你的代碼中有正確的東西嗎? 如果(a1.contains(clsA2)<< == { 的System.out.println( 「成功」);} 其他 { 的System.out.println( 「失敗」);} 對不起 – tres2k 2012-02-14 17:40:52

+0

鄉親......這是我的錯,我從一張表中得到了我不應該使用的數據,這給了我沒有預料到的結果,因此也提出了這個問題,上面的代碼工作得很好。幫助。 – Raghu 2012-02-14 20:51:19

2

你得到一個「失敗」,因爲你檢查是否a1包含當你還沒有加入到clsA2a1clsA2。檢查a2.contains(clsA2)是否應打印「成功」

+0

以及我的想法是比較是否有一個clsA2的對象相當於clsA1中的某些東西,它是包含clsA1類型的對象的數組中。 – Raghu 2012-02-14 17:31:52

+0

啊,好的。似乎應該那樣工作。我會試着用調試器逐步調試equals方法,以查看哪個檢查失敗。 – 2012-02-14 17:36:40

0

我只是複製粘貼並測試了你的代碼,我得到了成功,你在a1.contains(clsA2)之後只錯過了一個圓括號,生成的日食equals()確實處理null