不是这样的呀,public boolean equals(MyClass c)这个方法是永远也不会调用的,除非你手动调用,而public boolean equals(Object c)这个方法相当于回调函数,HashSet的原理就是利用HashMap的key的唯一性,hashmap首先用hashcode%桶的数量得到哪一个桶,再调用equals(Object c)这个方法判断这个key是否在该桶中。 这是重载,是静态方法调用,所以你就算重载了equals(MyClass c)方法,它调用的还是equals(Object c),如果这个类没有equals(Object c),就会调用Object的equals(Object c)方法。