关于HashSet中重写的equals参数

小C哈哈哈 2017-12-01 12:23:19
equals(Object obj)这个函数的参数obj是引用那个类的啊?
为什么还要有if(!obj instanceof 某个类) 这样的判断,obj不是指向你集合中元素的类型吗?
为什么啊
...全文
298 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Everything is Object.万物皆对象
Tony__Java 2017-12-12
  • 打赏
  • 举报
回复
首先搞清楚Object类是什么,obj是任意类型的,equals()的本意是用来比较地址的,但通过重写方法可以让它比较两个对象的大小,if(something)是判断当前传入的obj与调用equals方法的对象是否为同一类型,如果不同,那就不用比较了直接false,如果相同再继续判断别的.
李德胜1995 2017-12-01
  • 打赏
  • 举报
回复
引用 3 楼 xiaoxi_hahaha 的回复:
我还是不懂传给obj的对象是谁?
源码不是说得很清楚了吗???AbstractSet里面重写了Object的equals方法,obj是你调用equals方法时传入的对象,可以是任意对象,进入方法后会判断传入的对象是不是Set接口的实现类,如果不是直接返回false.... equals(Object obj)这个函数的参数obj是你调用方法时传入的参数 if(!obj instanceof 某个类) 是判断你传入的对象是不是Set接口的实现类.....
java小白脸 2017-12-01
  • 打赏
  • 举报
回复
传给obj类型是Object,a.equals(obj) 是判断a和obj是否相等(相同……),如果a的类型和obj的类型不同,还判断个鸟啊!所以 if(!obj instanceof 某个类) 这个是前提!某个类一般是a的类型。
小C哈哈哈 2017-12-01
  • 打赏
  • 举报
回复
我还是不懂传给obj的对象是谁?
自由自在_Yu 2017-12-01
  • 打赏
  • 举报
回复
接口Collection定义equals
interface Collection{
  boolean equals(Object o);
}
接口Set继承了Collection
public interface Set<E> extends Collection<E>{
  boolean equals(Object o);
}

class HashSet extends AbstractSet<E> implements Set<E>{
}
public abstract class AbstractSet<E> implements Set<E>{
  public boolean equals(Object o) {
if (o == this)
    return true;
if (!(o instanceof Set))
    return false;
Collection c = (Collection) o;
if (c.size() != size())
    return false;
        try {
            return containsAll(c);
        } catch (ClassCastException unused)   {
            return false;
        } catch (NullPointerException unused) {
            return false;
        }
    }
}
自由自在_Yu 2017-12-01
  • 打赏
  • 举报
回复
接口Collection定义equals interface Collection{ boolean equals(Object o); } 接口Set继承了Collection public interface Set<E> extends Collection<E>{ boolean equals(Object o); } class HashSet extends AbstractSet<E> implements Set<E>{ } public abstract class AbstractSet<E> implements Set<E>{ public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Set)) return false; Collection c = (Collection) o; if (c.size() != size()) return false; try { return containsAll(c); } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; } } } 看一下这几个类就明白了,HashSet实现了Set接口的equals方法,这个方法是在父类AbstractSet里面实现的 equals(Object obj)这个函数的参数obj是引用那个类的啊? 这个obj可以是任何类,因为这个obj是Object的一个对象,Object是所有类的父类,所以这个参数可以是任意一个class if(!obj instanceof 某个类) 这个obj是传进的一个参数

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧