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

Java equals()方法总是返回false

仉高昂
2023-03-14

我正在尝试使用equals方法与对象进行比较,但它总是返回false

public class main {
    public static boolean match(house h1,house h2) {
        if(h2.equals(h1)) {
            return true;
        }
        else {
            return false;
        }
    }
    public static void main(String[] args) {
        house myHouse1 = new house("jj",5,5);
        house myHouse2 = new house("jj",5,5);
        
        System.out.println(match(myHouse1,myHouse2));

    }

}

共有1个答案

能钟展
2023-03-14

您必须自己实现 equals 方法。

equals方法不会神奇地测试您的自定义类的两个实例是否被认为彼此“相等”。您必须自己定义两个对象何时相等。

由于您自己没有实现等于,因此选择了Object的实现(在您的情况下),它只根据身份进行比较。new创建的两个对象始终具有不同的标识,即内存中的两个独立块,尽管它们具有完全相同的字段。

因此,您需要重写等于(根据合同,还需要重写hashCode)。请注意,<code>等于</code>方法必须接受<code>Object</code>而不是<code>House</code><sup>1</sup>,即<code>公共布尔值等于(Object-other){…}</ccode>。

您有几个选项来实现 equals(和哈希代码):

  • 自己手写。详细信息:如何在 Java 中重写等于方法
  • 使用 IDE 为您生成它们。Fenio已经在评论中提供了如何在IntelliJ中执行此操作。在 Netbeans 中,打开类,右键单击源代码,然后单击“插入代码...”→等于()和哈希代码()...,然后选择要包含在比较中的字段。
  • 使用龙目岛为您生成它们,使用@EqualsAndHashCode注释。
  • 把你的房子变成一个记录2,你可以免费获得平等哈希代码

1根据Java命名约定,类名应该用PascalCase编写,因此house应该是House
2记录从Java16开始可用(在Java14和15中作为预览功能)。

 类似资料:
  • 在.NET Framework 4.5中,由Trim()方法调用的专用TrimHelper()方法使用以下条件来确定是否需要修剪字符:(由.NET Reflector反编译的代码) 我想知道为什么IsBOMWhitesspace方法总是返回false?? 这是微软计划在未来改变/扩展的吗?例如,通过检查char是否为‘u efff’并在这种情况下返回true?

  • 问题内容: 我已经写了这段简单的代码: 在我的情况当属。谁能建议/建议出什么问题了? 问题答案: 错误检查和处理是程序员的朋友。检查初始化和执行cURL函数的返回值。并在失败的情况下包含更多信息: *在 手动状态: 成功返回cURL句柄,错误返回 FALSE 。 我观察到该函数在您使用其参数且无法解析域时会返回。如果未使用该参数,则该函数 可能 永远不会返回。但是,请务必始终进行检查,因为该手册并

  • 我在Android Studio上写过Java代码。我做了登录方法,在我的代码中发生了一些事情。它没有返回正确的返回值。返回值始终为false。虽然我在Android Studio上检查了函数,但是布尔变量已经正确地改变了,但是它在方法的末尾又改变了,所以登录方法总是返回false&我无法继续登录。 请帮我解决这个困惑的时刻。任何回答都将不胜感激,非常感谢。

  • 我有一个整数的二叉搜索树,包括1、2、...、9。我的遍历方法工作,我知道节点在那里,并且以正确的顺序。 我在纸上写下了当我搜索一个值时发生的事情,它返回根是没有意义的。我做错了什么?

  • 问题内容: 结果始终为1: 我在phpMyAdmin中运行了$ sql查询,它返回3,所以查询不是问题。$ vote_total全局初始化为0,因此1来自某个地方。我还需要提供什么其他信息来帮助我? 谢谢,瑞安 问题答案: 返回选定的行数,而不是特定行的字段。使用来获取您与您的查询选择的行: 您还可以用来获取一行并获取特定字段: 这将获取第一行(从零开始)并返回第一字段(从零开始)。

  • 我使用Ehcache 2.6.8作为Spring Boot应用程序的一部分,作为Hibernate 4.3.11的二级缓存。我有一个JMX MBean,它允许我检查缓存的内容(如果您感兴趣,可以在这里查看)。 首先,我使用CacheManager名称来获取缓存列表。这很好。我可以用返回缓存。然后我调用。这很好,cacheName是“com.myapp.DomainObjectName”,键被列为“