自定义类equals方法疑问:instanceof判断后为何未终止执行?
自定义equals方法判断逻辑的疑问解答
- 你完全不用担心后续代码会执行——当
!(object instanceof class)的结果为true时,执行return false;语句后方法会立刻终止,后面的类型转换代码根本不会被运行。 - 举个实际的代码例子就能看明白:
@Override public boolean equals(Object obj) { // 1. 引用相同直接返回true,方法结束 if (this == obj) { return true; } // 2. 传入对象不是当前类实例,返回false,方法直接终止 if (!(obj instanceof MyClass)) { return false; } // 3. 只有上面的if条件不成立(即obj是MyClass实例),才会执行到这里的类型转换 MyClass other = (MyClass) obj; // 后续的属性相等性判断 return this.name.equals(other.name) && this.age == other.age; }
- 核心点就是
return语句的作用:只要执行了return,当前方法就会停止所有后续操作,直接把结果返回给调用方。只有当传入的对象确实是当前类的实例时,才会跳过return false;,继续执行后面的代码。
内容的提问来源于stack exchange,提问作者crawwwler
相关产品推荐
相关产品推荐

