hashcode
Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入,通过哈希算法,得到即是哈希值就是hashcode。这种转换是一种压缩映射,也就是,哈希值的空间通常远小于输入的空间,不同的输入可能会哈希值相同,而不可能从哈希值来唯一的确定输入值
某些结论
- 对象相等则hashCode一定相等;
- hashCode相等对象未必相等。
:(不同对象的hashcode是否一定不一样?是错误的,hashcode本身就是个函数,是可以重载的,你完全可以写个函数总是返回固定值。但hashcode函数从设计要求上来说,要尽量保证:不同对象的hashcode不同。)
hashcode equals及 == 的关系
1.通俗说法
== 是比较地址是否相等,
:JAVA中声明变量是引用,不同的引用,可能指向同一个地址。
equals 是比较值是否相等。
hashcode则是比较哈希值是否相同
(-128到127之间的数,会进行缓存)
eqauls方法和hashCode方法关系
Java对于eqauls方法和hashCode方法是这样规定的:
(1)同一对象上多次调用hashCode()方法,总是返回相同的整型值。
(2)如果a.equals(b),则一定有a.hashCode() 一定等于 b.hashCode()。
(3)如果!a.equals(b),则a.hashCode() 不一定等于 b.hashCode()。此时如果a.hashCode() 总是不等于 b.hashCode(),会提高hashtables的性能。
(4)a.hashCode()==b.hashCode() 则 a.equals(b)可真可假
(5)a.hashCode()!= b.hashCode() 则 a.equals(b)为假。