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
相关产品推荐
相关产品推荐

