- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + age;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
复制代码
这个是我自定的Person类自动生成的HashCode
HashCode是根据你定义的类的成员或者成员和方法返回的HashCode值
最终造成的结果就是相同的对象返回的HashCode值是相同的
比方说你的类的成员是
String name;
int age;
那我根据你这个两个变量返回HashCode
name.hashCode()+ age.hashCode()*31
这个值,假如你新建对象name和age相同,返回值是肯定相同的
而31只是为了把值的偶合性降低 ,比如 name是 30 age是 20 会和 name 是 29 age是 21相同那么如果我乘了31 他们就不会相同了,也就是说这个数可以不是31,31只是因为他是2的4次方减1,这样计算机处理比较容易,2左移5位减一
然后现说HashCode作用:从上面可以看出,如果这个HashCode不同那么两个对象肯定不是相同的
如果HashCode相同 ,不一定是一个对象
当HashCode相同时我们就需要用Equals来进行比较两具对象了
equals比较是比较的内容是不是一样,如果内容一样那么对象肯定是相同的了 |