楼主,你一连new 了三个对象,怎么能说它们的地址一样呢?
new 了三个对象,就是说s1,s2,s3分别指向了不同的对象(不同的地址)
搞清这点就不难理解了吧
System.out.println(s1==s2);//因为==比较的是地址,跟hashcode没关系,所以返回false
System.out.println(s1.equals(s3));//你重写了hashCode()方法,但跟这句有什么关系呢,人家这里调用的是equals方法,而你又没重写,且默认的equals方法比较的就是地址,故而依然返回false;
至于你说为什么三个都存进去了,因为hashset要先用hashcode 判断,hashcode一样,再用equals判断,前面说了,你只重写了hashcode(),而没重写equals(),默认的
equals方法比较的又是地址,三者地址不同,被认为是三个不同对象,自然就都存进去了
|