第一节: object 的方法
1.hashcode() 内存地址机器位,理解成内存地址即可。每个对象唯一
2、equals() 原生的是判断是否属于同一个对象
public boolean equals(Object obj) {
return (this == obj);
}
可以看到如果equals()如果没有被重写的话,比较的是对象的地址,String,Integer等包装类里面都重写了该方法,例如String类的equals()方法是比较对象的内容,也就是字符串的,而不是地址
3、getClass()
4、 clone()
5.toString()
可以看到返回的字符串是由对象的名称和对象的hashcode组成的
6.finalize()
子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。
7.notify(),notifyAll(),wait()
第二节:看看hashMap怎么get一个对象
e.hash == hash && ( k = e.key || key.equals(k) )
哈希值相等,并且 是 (同一个对象地址或者equals)
相同对象没什么问题,但是不同的对象key,可能hashCode不同,但是hash值可能相同,因为我们put进去的一般是按照值来算,不同对象相同值的key如果不重写equals,则永远不会相等,导致问题