为何重写Java的equals()方法时要先判断this == o?
重写equals()时先判断
this == o的原因 先看你给出的这段重写的equals代码:
@Override public boolean equals(Object o){ if(this == o) return true; if(!(o instanceof Menu)) return false; Menu menu = (Menu)o; return price == menu.price && Objects.equals(name,menu.name); }
大家重写equals时先加this == o的判断,主要有这几个原因:
- 性能优先:如果两个对象是同一个内存引用,那它们的所有字段必然完全一致,直接返回true可以跳过后续的类型校验、字段比对等操作,尤其是对象包含大量字段或者字段比对(比如字符串、复杂对象)比较耗时的时候,能显著提升方法执行效率。
- 避免无意义操作:当
this == o成立时,后续的类型转换、字段比较都是多余的,提前终止方法能减少不必要的代码执行流程。 - 满足equals的通用约定:Java规范里明确要求equals方法必须满足自反性——即任何非null的对象x,
x.equals(x)必须返回true。先判断this == o就是最直接、高效地满足这条约定的方式。
内容的提问来源于stack exchange,提问作者정지은
相关产品推荐
相关产品推荐

