为什么这个 .equals() 代码示例返回“false”? [复制]

2023-12-15

考虑:

class Dog{
    int height;
    int weight;
    String name;
}

public class DogTest {

    public static void main(String[] args) {
        Dog one = new Dog();
        one.height=4;
        one.name="fudo";
        one.weight =2;
        Dog two = new Dog();
        two.height=4;
        two.name="fudo";
        two.weight =2;
        if (one.equals(two)){
            System.out.println("True");
        }
        else{
            System.out.println("False");
        }
    }
}

为什么会输出“False”?如果在Java中默认情况下“所有对象都不相等,即使它们具有相同的值”,那么我如何“说服”Java这两个对象实际上是相等的?

好吧,即使两只狗有相同的名字、身高、体重,一只可能是达尔马提亚狗,另一只可能是斗牛犬,即使它们是相同的“种族”,但本质上,它们总是可以彼此不同。

PS:我的理解是这样说的如果(一==二){}我们正在比较它们是否都引用堆上的同一个对象,.equals在字符串上比较它们是否具有相同顺序的相同字符。


equals 方法默认会说“这是内存中的同一个对象吗?”除非你覆盖它。

你没有覆盖它。

行为没有改变。

您需要添加一个像这样的新方法

public boolean equals(Object o) {
    if(o instanceof Dog) {
        Dog d = (Dog)(o);
        Dog t = this;
        return t.height == d.height && t.weight == d.weight && t.name.equals(d.name);
    }
    return false;
}

Stephan 提出了一个很好的观点——永远、永远、永远不要在没有 hashCode 的情况下实现 equals。始终在两者中使用相同的字段。

public int hashCode() {
    int hash = name.hashCode();
    hash = hash * 31 + weight;
    hash = hash * 31 + height;
    return hash;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 .equals() 代码示例返回“false”? [复制] 的相关文章

随机推荐

  • 创建安装程序:从注册表项读取安装路径(例如 wix/installshield/nsis)

    我想创建我的程序的安装程序 但由于安装相当复杂 我需要比 installshield 限量版更高级的东西 我必须从当前的安装程序中运行另一个安装程序 用户是否按 取消 或安装该程序并不重要 我只需要运行它即可 我必须在用户计算机上安装一个包
  • XMl 解析中的空指针异常

    我需要解析 Xml 文档并将值存储在文本文件中 当我解析普通数据 如果所有标签都有数据 时 它工作正常 但如果任何标签没有数据 那么它会抛出我需要的 空指针异常 要做的 为了避免空指针异常 请建议我使用示例代码 示例 XML
  • 无法使用 Laravel SMTP 驱动程序将邮件发送到 gmail 帐户并且没有收到错误

    我正在 Localhost 中构建 Laravel 5 8 应用程序 我这样配置我的 env 文件 MAIL DRIVER smtp MAIL HOST mail mydomain com MAIL PORT 465 took from m
  • 隐式转换没有警告

    g sizeofint cpp std c 11 Wconversion Wall Wextra Werror pedantic errors include
  • Django 的 Cron 示例

    我在互联网上搜索了 Django 中计划作业的工作示例 但我只能找到如何做 但没有给出例子 有人可以分享 Django 框架使用 cron 运行计划任务的工作示例吗 首先创建一个自定义管理命令 该命令将用于将任务添加到 crontab 这是
  • 尝试在 Microsoft Access 中制作高效的日历

    我正在开发一个设备管理系统 前端使用 MS Access mdb 文件 后端使用 SQL Server 2008 如果需要 我可以将前端转换为 MS Access 2010 文件 我创建了一个日历表单 用户可以在其中查看哪些设备已预订 注销
  • 从 Outlook 加载项中获取 HTTP

    我需要调用外部 Web 服务 以便我的外接程序与我们公司的 Java servlet 进行通信 我尝试使用 JavaScriptXMLHttpRequest var http new XMLHttpRequest http open GET
  • 在 Scala 常规类中使用 Lenses

    大多数流行的 Scala JSON 库都能够序列化和反序列化为案例类 不幸的是 在 Scala 2 11 发布之前 案例类可以拥有的参数数量是有限制的 最多 22 个 作为超过此限制的解决方法 可以使用常规类 例如 如何使用 non cas
  • 从具有重复键的字符串创建 dict/json Python

    我有一个可以解析为 JSON 或 dict 对象的字符串 我的字符串变量如下所示 my string variable a 1 b b1 1 b2 2 b b1 3 b2 2
  • ggplot2 geom_smooth 线未显示在我的图表上

    我正在尝试使用绘制的数据添加一条线geom smooth 但我遇到了困难 这是我的代码 plot BG ggplot data geom point aes x Mass LT y BG colour factor Temp f plot
  • Active Directory PrimaryContext.ValidateCredentials 域消歧

    我正在处理两个域 一个是受信任的域 一个域上可能有一个 JohnSmith 另一个域上可能有另一个 JohnSmith 这两个人都需要登录我的应用程序 我的问题 我传入哪个域并不重要 此代码返回 true 我如何知道哪个 JohnSmith
  • 运行“adb shell wm Density 240”更改 Android 设备密度时出错

    我想调整 Android 设备上的屏幕大小 当我运行以下命令时 adb shell wm density 240 or adb shell wm size 800x480 我收到错误 system bin sh wm not found 为
  • 将混合嵌套列表转换为嵌套元组

    如果我有 easy nested list foo bar foofoo barbar 并希望拥有 foo bar foofoo barbar I can do tuple tuple i for i in easy nested list
  • 创建自定义 NSAttributedString.Key

    我正在尝试构建一个简单的笔记应用程序 目前 我关注的是使用不同文本样式设置文本的可能性 例如正文 标题 粗体 斜体等 我用了一个NSAttributedString设置不同的文本样式 现在 我想检测所选文本应用了哪种样式 我认为一个好方法是
  • Bash 实时读取 STDOUT 流

    我已经搜索过这个并期望找到数百个解决方案 但没有找到 我想读取 STDOUT 流并等待特定字符串出现 而不等待该过程完成 我现在所拥有的 等待该过程完成后再返回输出 RESP execute some command 2 gt 1 if R
  • 如何让 jQuery Sticky Float 插件反应动态页面高度变化?

    我目前正在使用 StickyFloathttp plugins jquery com project stickyfloat我通过 jQuery 动态更改对象所在的 div 的高度 CSS 高度的更改效果很好 但 StickyFloat 无
  • 使用 @JsonView 排除(如 @JsonIgnore)与 play 框架默认 json writer?

    看来你不能混合 JsonIgnore和 JsonView 我想默认隐藏一个字段 但在某些情况下显示它 基本上我已经有了这个设置 class Parent extends Model public Long id public Child c
  • 如何重构数千行Java代码?有没有可用的工具?

    在我们的应用程序中 我们有两个或三个类 其中包含整个 Java Swing 应用程序逻辑 这两个或三个类包含大约 7k 行代码 现在我被分配了重构这段 Java 代码的任务 我该如何开始 有没有可用的工具可以进行重构或至少指导我们 我推荐
  • 使用 ASP.NET MVC 的 HttpHandler

    如果我有一个标准 AXD HttpHandler 和 axd 的默认忽略路由 那么为什么 ASP NET MVC 仍然处理子目录中的请求 例如 如果有针对 Content Css css 的请求 axd d 如果请求是在 root css
  • 为什么这个 .equals() 代码示例返回“false”? [复制]

    这个问题在这里已经有答案了 考虑 class Dog int height int weight String name public class DogTest public static void main String args Do