我正在尝试比较两个对象,并且两个对象在每个字段上都具有完全相同的值。
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 比较每个对象中的字段 number2
和 string2
时,返回值为 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[] number2
和 String[] string2
吗?
所有其他字段在同一 equals 方法中返回 true(如预期)。
number2={10,11} 和 string2={7c2cfc4e-5805-45ad-8687-4f2412a92e1d,d91b9609-39fb-4fe9-9f36-db33608970d1}
谢谢
最佳答案
equals() 将比较两个对象的引用,因此除了基元和包装类之外,默认情况下您总是比较两个不同的对象。
这种机制背后的原因是,开发人员可以重写根类 Object 中的 equals 方法,以根据对象的内容决定何时返回 true 相等性。为所有可能存在的类创建 equals() 函数是不可能或不合理的。在本例中,在对象中创建 equals 方法的标准是检查两者的引用。
数字和字符串不是基元,因此您正在比较不同对象的引用,因此您会得到一个 false bool 作为返回值。
查看此链接以获取完整内容:http://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html
关于java - 使用 .equals 比较数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262833/