Java基础
markdown
## 何时需要重载hashcode() 与equals()方法
```
https://blog.csdn.net/kris1025/article/details/79875638
```
## 何时:自定义对象作为 hashmap 的key
why: Object 类 eaquls方法比较的是对象是否指向同一个地址,hashcode 是根据对象地址计算的。业务逻辑预期对象相等是指值是否相等。因此需要重载hashCode eaquls
1)重载hashCode()是为了对同一个key,能得到相同的Hash Code,这样HashMap就可以定位到我们指定的key上
2)重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正地获得了这个key所对应的这个键值对。
## == 与eaquls区别
== 比较对象是否指向同一个地址, eaquls一般预期是比较业务逻辑上是否相等,即值是否相等。
Integer 使用 == 比较要注意
Integer类有一个默认在-128~127之间的常量缓存池,当我们的基本类型的数在这个之间的时候会指向缓存中的对象,也就是同一个对象。
该范围内的相同值==比较相等,超过该范围即使数值相等,结果也不等
e.g.
```
https://blog.csdn.net/meiyijian/article/details/77230202
```
```
public static void main(String[] args) {
// case 1
Integer a1 = Integer.valueOf(60);
Integer b1 = 60;
System.out.println("1:="+(a1 == b1));
// case 2
Integer a2 = 60;
Integer b2 = 60;
System.out.println("2:="+(a2 == b2));
// case 3
Integer a3 = new Integer(60);
Integer b3 = 60;
System.out.println("3:="+(a3 == b3));
// case 4
Integer a4 = 129;
Integer b4 = 129;
System.out.println("4:="+(a4 == b4));
}
1:=true
2:=true
3:=false
4:=false
```
## HashMap 源码 put get操作过程
```
https://zhuanlan.zhihu.com/p/21673805
```
Comments
Post a Comment