当前位置: 首页 > 知识库问答 >
问题:

使用. equals比较数组

邢同
2023-03-14

我试着比较两个物体,两个物体在每个区域上都有完全相同的值。

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}]

请注意,它们都打印相同的结果。

然而,当我比较每个对象中的字段时,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[]Number ber2String[]string2?所有其他字段在相同的equals方法中返回true(如预期)。

数字2={10,11}和字符串2={7c2cfc4e-5805-45ad-8687-4f2412a92e1d,d91b9609-39fb-4fe9-9f36-DB3360897D1}

谢啦

共有2个答案

沈实
2023-03-14

你可以试试看

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

数字2也是一样。

葛俊
2023-03-14

equals()将比较两个对象的引用,因此除了原语和包装器类之外,默认情况下总是比较两个不同的对象。

这种机制背后的原因是,开发人员可以从根类对象重写equals方法,以根据对象的内容决定何时返回true for equality。为所有可能存在的类创建equals()函数是不可能的,也不合理的。在本例中,在对象中创建equals方法的标准是检查两者的引用。

Number和String不是原语,所以您比较不同对象的引用,因此您会得到一个假bool作为返回。

查看此链接以获取完整内容:http://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html

 类似资料:
  • 测试代码(只是为了遵守SSCCE,显然有更好的方法来改变您自己的不区分大小写的数据模型) 比方说,我希望我的类实现遵循API中建议的强烈建议: 强烈建议,但不是严格要求(x.compareTo(y)==0) == ( x.equals(y))。 那么在中使用可以吗?当然,我们正在确保不会调用作为回报。 类似:什么时候包括什么?

  • 问题内容: 假设我需要使用按某些域逻辑排序的元素。通过这种逻辑,不相等的元素的顺序无关紧要,因此compare方法可以返回0,但是在这种情况下,我不能将它们放入。 所以,问题是:这样的代码有什么缺点: 更新 : 好。如果它应该永远是方法之间的一致性,并且,作为@SPFloyd - seanizer和其他人说。如果我删除接口并移入此逻辑是否会更好甚至更好(我可以在不破坏封装的情况下做到这一点)?因此

  • 是否有一种惯用的方法来比较两个NumPy数组,它们将NaN视为彼此相等(但不等于NaN以外的任何东西)。 例如,我希望以下两个数组比较相等: 和以下两个数组进行比较: 我正在寻找一种可以产生标量布尔结果的方法。 以下方法可以做到这一点: 但它很笨重,并且创建了所有这些中间数组。 有没有一种方法可以更容易地观察眼睛,更好地利用记忆? 另外,如果有帮助的话,已知数组具有相同的形状和数据类型。

  • 问题内容: 我知道Java枚举被编译为具有私有构造函数和一堆公共静态成员的类。比较给定枚举的两个成员时,我一直使用,例如 但是,我刚遇到一些使用equals运算符==而不是.equals()的代码: 我应该使用哪个运算符? 问题答案: 两者在技术上都是正确的。如果你查看源代码,它只是顺应了。 我使用,但是,这将是null安全的。

  • 我用一个字段构造了一个类。然后创建了两个对象,并且必须使用运算符和对它们进行比较。以下是我所做的:

  • 根据这个答案,粗略地说,如果我们有一个学生对象的课堂对象数组,类[索引]!=学生1。我相信这是我在实现等于方法将数组[索引]对象与另一个对象进行比较时犯的错误。我相信数组[索引]和我正在比较的对象是相同的。 下面的代码显示了我的getNumStudents方法,在该方法中,我尝试计算一个学生id在一个班级中出现的次数。ID代表他或她喜欢的品牌鞋(课后练习)。这个方法在我的教室对象类中,它实现了一个