You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义复数类如何定义equals方法,解决与double比较报错问题

报错原因
  1. Java 语法层面不支持自定义引用类型和基本数据类型直接使用==运算符比较:你代码中d==0里d是自定义complex类的引用类型,0是int基本类型,两者没有可兼容的比较规则,直接触发类型不兼容报错。
  2. 你之前的复数对象比较“正常运行”属于逻辑巧合:==对两个引用类型比较时,判断的是双方是否指向同一个内存地址,而非你自定义equals方法中写的实部虚部内容相等规则,你之前的场景刚好所有比较的复数都是同一个对象,才得到了预期结果,本身逻辑是错误的。
  3. 你编写的两个equals重载方法全程没有被调用:所有比较逻辑你都使用了==运算符,而非显式调用equals()方法,自定义的内容比较规则完全没生效。
解决方法
  • 所有复数内容比较的逻辑全部替换为显式调用equals方法,禁止使用==做复数内容判断
  • 复数和数值比较的部分,调用你重载的接收double参数的equals方法,数值字面量写为double类型避免歧义,比如d.equals(0.0)
  • 可选规范优化:重写Object类自带的public boolean equals(Object o)方法,同时配套重写hashCode()方法,符合Java语言对于对象相等判断的规范,避免后续出现方法分派错误。

修改后的判断逻辑示例:

public static void solveCubic(complex a, complex b, complex c, complex d){
    if (a.equals(b) && b.equals(c) && c.equals(d) && d.equals(0.0)) {
        ...
    }
}

内容的提问来源于stack exchange,提问作者ps1nk4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:57:04