簡體   English   中英

使用.equals比較數組

[英]Comparing arrays using .equals

我正在嘗試比較兩個對象,並且每個字段的值都完全相同。

System.out.println(basicTypes1);

[id=2013756475,
boolean2={true},
byte2={32},
short2={1,2},
int2={10,11},
float2={0.1,0.2},
double2={0.01,0.02},
number2={10,11},
char2={c,t},
string2={7c2cfc4e-5805-45ad-8687-4f2412a92e1d,d91b9609-39fb-4fe9-9f36-db33608970d1},
date2={Tue Jun 17 11:48:56 BST 2014,Tue Jun 17 11:48:56 BST 2014},
obj2={443f38f4-d5b4-41fb-aeeb-d086f4edc62a,d855d031-ad8d-4fce-b5e1-d959034a0b7c}]

System.out.println(basicTypes2);

[id=2013756475,
boolean2={true},
byte2={32},
short2={1,2},
int2={10,11},
float2={0.1,0.2},
double2={0.01,0.02},
number2={10,11},
char2={c,t},
string2={7c2cfc4e-5805-45ad-8687-4f2412a92e1d,d91b9609-39fb-4fe9-9f36-db33608970d1},
date2={Tue Jun 17 11:48:56 BST 2014,Tue Jun 17 11:48:56 BST 2014},
obj2={443f38f4-d5b4-41fb-aeeb-d086f4edc62a,d855d031-ad8d-4fce-b5e1-d959034a0b7c}]

請注意,它們都打印相同的結果。

但是,當我使用.equals比較每個對象number2string2中的字段時,返回值為false。

這是比較值的方法示例:

public boolean isEqual(Object basicTypes1, Object basicTypes2) {
boolean objectResult = true, fieldResult;

        Class<?> leftClass = basicTypes1.getClass();
        Class<?> rightClass = basicTypes2.getClass();

        List<Field> fields = getAllFields(leftClass);

        for (Field field : fields) {
            field.setAccessible(true);
        //the fields number2 and string2 enter in this if so I won't post the rest of them
        if (TypeVerifier.isBasicType(field.getType())) { // handle primitives
            fieldResult = leftFieldValue.equals(rightFieldValue); //comparing the above values, returns false, why?
            if (!fieldResult) {
                logger.error(getFieldError(leftClass, field, leftFieldValue, rightFieldValue));
            }

        }
     objectResult = objectResult && fieldResult;
    }
return obejctResult;
}

我還有其他方法可以比較Number[] number2String[] string2嗎? 所有其他字段在相同的equals方法中返回true(與預期一樣)。

number2 = {10,11}和string2 = {7c2cfc4e-5805-45ad-8687-4f2412a92e1d,d91b9609-39fb-4fe9-9f36-db33608970d1}

謝謝

equals()將比較兩個對象的引用,因此,除了基元和包裝器類之外,默認情況下始終要比較兩個不同的對象。

這種機制背后的原因是,開發人員可以覆蓋根類Object中的equals方法,以根據對象的內容決定何時返回true表示相等。 為所有可能存在的類創建equals()函數是不可能的,也不是合理的。 在這種情況下,在對象中創建equals方法的標准是檢查兩個對象的引用。

數字和字符串不是基元,因此您正在比較不同對象的引用,因此會得到錯誤的布爾值作為返回值。

檢查此鏈接以獲取完整的內容: http : //docs.oracle.com/javase/tutorial/java/IandI/objectclass.html

你可以試試

for(int i=0;i<basicTypes1.string2.length;i++)
{
   fieldResult=basicTypes1.string2[i].equals(basicTypes2.string2[i]);
}  

與數字相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM