Java-HashCode
Java-HashCode
1. Equals和==的区别
==
仅在相比较的对象就是自己本身时,才返回 true
。而 equals
是 Object 类中的方法,其返回值可以根据需求定义,默认情况下,equals
返回的也是 ==
的值,但在像 HashMap、Array 中等则会返回 key 或 value 是否相等。
由于 String 和常数是存放在常量池,因此直接比较 String 的值时,相同的字符串两个都会返回 true
,例如:
1 | String sa = "123"; |
2. 为什么要同时重写equals()和hashcode()
默认情况下,equals比较的是两个对象的内存地址是否相等,重写equals 方法通常是转换成比较值是否相等,如果重写了equals方法而不重写hashcode方法,默认情况下hashcode是根据对象的内存地址计算的,则可能出现equals为true而hashcode不相等的情况,这和hashcode的本意是不符的。HashCode不相等的两个对象一定不相等,相等的两个对象HashCode一定向等。
(1)为什么要有HashCode方法?
可以根据HashCode来判断两个对象是否相等,而不需要依次比较equals。switch判断String时,判断的是hashCode。
(2)hash算法的原理是什么?
(3)在Java中哪些地方用到了HashCode?