Hello! 欢迎来到小浪资源网!


Java8中重写equals方法:为什么需要强转?


Java8中重写equals方法:为什么需要强转?

Java8 重写 equals 带来的困惑

在 java 中,当我们希望两个对象进行相等比较时,需要重写 Object 类的 equals 方法。然而,对于重写后如何对对象进行强转,却常常引起困惑。

问题:强转的必要性

以下代码展示了重写的 equals 方法:

立即学习Java免费学习笔记(深入)”;

public class Phone {     // ... 代码略 ...      @Override     public boolean equals(Object obj) {         // ... 代码略 ...          if (obj instanceof Phone) {             Phone other = (Phone) obj;             // ... 代码略 ...         }         // ... 代码略 ...     } }

代码中,在 if 判断内对 obj 进行了强转为 phone 类型。当我们传入一个 phone 对象时,obj 已经是该类型,为什么还要强转?

答案:

实际上,即使 obj 是 phone 类型,但 equals 方法的形参类型是 object。这意味着可以传入任何类型的对象,而不仅仅是 phone 对象。若不进行强转,编译器会提示错误,因为 object 类中没有 getname() 和 getprice() 方法。

强转的目的是告诉编译器

  • 尽管传入的是 object 类型,但其实可以将其视为 phone 类型。
  • phone 类型具有与我们重写的方法中使用的属性相对应的 getter 方法。

注意事项

需要注意的是,如果重写了 equals 方法,则也需要重写 hashcode 方法。否则,在将自定义对象添加到集合类时可能会出现意外行为。

相关阅读