1.==和equals到底比较什么?
==既可以比较基本类型又可以比较引用类型,如果是基本类型它比较的是值是否相等,如果是引用类型比较的是地址
而equals是Object类的一个方法,在equals()方法源码149显示equals本质上就是==,即出厂默认设置是==。对于大多数的初级程序员,都认为equals方法只是值比较,而忽略了它本质上就是==的事实。因此,equals方法的比较方式有两种。
- 若没有重写equals方法,那么equals方法就是Object类的方法,就是==
Person p1=new Person(1); Person p2=new Person(1); System.out.println(p1.equals(p2));//输出false
- 若是重写equals方法,则要看具体的默认规则,但一般是值比较
String s1 = new String("1"); String s2 = new String("1"); System.out.println(s1.equals(s2));//输出true
2.关于equals方法
由于equals是object类的方法,它传的参是Object的,所以equals方法只能比较引用类型。但是还是可以传递int等数据类型,这是因为Java5的时候包装了一种东东,它给你自动包装自动拆箱,给你自动换型了
3.重写equals()方法时为什么要重写hashCode()方法?
这是因为一个有自己特有的逻辑相等概念时,当重写equals()时,通常都要重写hashcode()。当使用Object的equals()方法比较时,
两个截然不同的实例有可能逻辑上是相等的,但是使用Object的hashcode()方法比较他们仅仅是两个对象。
因此,违反了相等的对象必须有相等的散列码的规定
结论:在重写equals()方法的时候,要重写hashCode方法。
4.HashMap的key存对象的时候,要注意什么?
如果自定义的对象作为Map的key,那么必须重写equals方法和hashCode方法
5.HashMap中的hashcode的作用
- .用于返回对象的散列码和支持hash表,例如hashmap
- 用于提高hash表的性能
- 通过计算key的hashcode作为存储key信息的数组下标,并且可用来查找key的存放位置