Java自定义复数类如何定义equals方法,解决与double比较报错问题
报错原因
- Java 语法层面不支持自定义引用类型和基本数据类型直接使用
==运算符比较:你代码中d==0里d是自定义complex类的引用类型,0是int基本类型,两者没有可兼容的比较规则,直接触发类型不兼容报错。 - 你之前的复数对象比较“正常运行”属于逻辑巧合:
==对两个引用类型比较时,判断的是双方是否指向同一个内存地址,而非你自定义equals方法中写的实部虚部内容相等规则,你之前的场景刚好所有比较的复数都是同一个对象,才得到了预期结果,本身逻辑是错误的。 - 你编写的两个
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
相关产品推荐
相关产品推荐

