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

Java使用instanceof运算符重写equals方法出现编译错误如何解决?

错误原因

  • 核心拼写错误:Java 中用于对象类型判断的关键字为全小写的instanceof,你代码第24行误写为大写O的instanceOf,编译器无法识别该关键字,触发了括号缺失、变量声明不合法等连锁报错。
  • 代码结构问题:equals方法内部的括号匹配、逻辑缩进不规范,同时缺少空指针、自引用判断,后续运行也可能触发空指针异常。
  • 优化建议:Employee类的ID属性是唯一且不可变的,作为equals判断的依据更合理,不需要比较姓名和薪资。

修正后的完整代码

//employee number, name, and salary
public class Employee{
    private String name;
    private final int ID;
    private double salary;
    private static int lastID;
    public Employee(String name, double salary){
        this.name = name;
        ID = Employee.lastID + 1;
        this.salary = salary;
        Employee.lastID = Employee.lastID + 1;
    } 
    public String getName(){return name;}
    public int getID(){ return ID; }
    public double getSalary(){ return salary;}
    public void setName(String newName){name = newName;}
    public void raise(double newSalary){ salary = newSalary;}
    @Override
    public String toString(){
        return "Name: "+ getName() + "\nID: " + getID() + "\nSalary: " + getSalary();
    }
    @Override
    public boolean equals(Object o){
        // 自引用判断,同一个对象直接返回true
        if (this == o) return true;
        // 空值、类型不匹配直接返回false
        if (o == null || getClass() != o.getClass()) return false;
        Employee input = (Employee) o;
        // 用唯一ID作为判断依据,避免后续属性修改导致equals结果变化
        return ID == input.getID();
    }
}

如果你需要保留原来的姓名+薪资的判断逻辑,把equals方法的返回逻辑改成如下即可:

return Double.compare(input.getSalary(), salary) == 0 
    && (name == null ? input.getName() == null : name.equals(input.getName()));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:48:04