1.hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考 [1] public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能
2.equals 了解需要看这个http://www.cnblogs.com/dolphin0520/p/3592500.html
String str = new String("hello");
String str1 = new String("hello");
sys.out.println(str == str1) ;
sys.out.println(str.equals(str1));
第一个为false;第二个为true; str和str1指向两个不同的对象。是两个不同的象的引用。地址是不同的。str = str1;str1指向了第一个对象的地址。两者就变成相等的了。
第二个是因为string 对equals进行了重写。
还可以看看这个http://www.cnblogs.com/lulipro/p/5628750.html
3.public boolean equals(Object obj)
Object类中默认的实现方式是 : return this == obj 。那就是说,只有this 和 obj引用同一个对象,才会返回true。
4. 两者比较相关博客推荐http://www.cnblogs.com/lulipro/p/5628750.html
5.为什么需要重写hashCode?
这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,
当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,
导致混淆,因此,就也需要重写hashcode()