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

如果比较对象数组索引和对象,如何正确使用equals()?

宿嘉
2023-03-14

根据这个答案,粗略地说,如果我们有一个学生对象的课堂对象数组,类[索引]!=学生1。我相信这是我在实现等于方法将数组[索引]对象与另一个对象进行比较时犯的错误。我相信数组[索引]和我正在比较的对象是相同的。

下面的代码显示了我的getNumStudents方法,在该方法中,我尝试计算一个学生id在一个班级中出现的次数。ID代表他或她喜欢的品牌鞋(课后练习)。这个方法在我的教室对象类中,它实现了一个接口

@Override
public int getNumStudents(T anEntry) {
    int count = 0;
    for (int index = 0; index < numberOfEntries; index++) {

       if (roster[index].equals(anEntry)) )
        {
            counter++;
        } 
    } 

    return count;
}

我的equals方法就是这样,并在学生课堂上实现:

public boolean equals(Student student) {
    if (this == student)
    {
        return true;
    }
    if (student == null)
    {
        return false;
    }
    if (this.getID() != student.getID())
    {
        return false;
    }

    return true;
}

我不知道我是否正确地进行了哈希代码覆盖,但这里是(在学生课堂上):

   @Override
    public int hashCode() {
    int result = 17;
    result = 31 * result + studentID;
    return result;
  }

我已经缩小了bug最有可能在这里:

   if (roster[index].equals(anEntry)) )

明确地

roster[index].equals(anEntry))

我应该调用什么,或者我应该如何调整我的getNum的学生(T anEntry)方法,以正确地返回在Classroom对象数组中具有特定ID(代表鞋子类型)的学生的数量?

共有1个答案

慕容博涛
2023-03-14

您的< code>equals签名错误。

< code>equals方法的正确签名必须如下所示。

public boolean equals(Object other)

然后在方法中,您应该检查它是否是可比较的类型,如果您确实需要它是 Student 类型,则必须检查这一点并返回 false,否则返回 false

在您的情况下,这将是实现所需的最小更改:

public boolean equals(Object other)
{
    if (this == other)
    {
        return true;
    }

    // This also works if `other` is `null`
    if (!(other instanceof Student))
    {
        return false;
    }

    // Now we cast it to `Student`
    final Student student = (Student) other;

    if (this.getID() != student.getID())
    {
        return false;
    }

    return true;
}
 类似资料:
  • 我已经被覆盖了hashcode和equals以查找具有相同开始日期和关闭日期的值。我得到了重复对象的类似哈希代码。当等同于这些对象时,我得到了布尔值“假”。在我的理解中,对象==对象比较对象的引用,即使引用是相同的;代码返回假。你能帮我理解是什么问题吗?我在下面发布了我的代码: Main.java 输出: 检查客户对象引用:Customer@643 对象引用(位于Map中):[Customer@6

  • 我正在尝试声明和初始化一个保存类数组 这是我用来解决项目内存管理问题的示例。我可以声明指针,但无法初始化它。 收到的错误: 对非常量表达式函数“void*operator new”的调用std::unique_ptr ship_crew_members=std::make_unique

  • 如果两个集合包含相同的对象,如何进行比较? 当然会打印错误。

  • 本文向大家介绍js对象如何深比较?相关面试题,主要包含被问及js对象如何深比较?时的应答技巧和注意事项,需要的朋友参考一下 之前其实没听说过,但是刚刚搜索到了 我还是不复制粘贴了 原文地址

  • 我的要求是,为了应用程序审计的目的,我希望比较两个BO对象,并返回一个obj diff作为Json字符串将详细信息存储到审计表中。在我的例子中,我实现了一个hibernate拦截器,它将监视BO操作。这部分工作得很好。但是当试图将BO对象与Javers进行比较时,会出现一个名为 下面是我的示例hibernate结果类 注意:BO对象在运行时可以包含值。

  • 问题内容: 我有两个像这样的对象数组: 我想知道数组是否相等。我定义的是相等的,因为array1中的每个值都与array2中该位置的值相同。因此,这两个数组将相等。 为什么最好找出这两个数组是否相等? 不是一个很深的等式,所以它是行不通的,我不知道是否遍历每个元素并进行比较是解决此问题的最佳,最有效的方法。有没有人有更好的建议? 编辑:我需要一个可以放入嵌套数组的等于。 问题答案: 使用。这项功能