1. ==
(1)比较基本数据类型,比较的是它们的值:byte,short,char,int,long,float,double,boolean.
(2)比较引用类型(类,接口,数组),比较的是它们在内存中的存放地址,即,相同的对象才为true.
2.equals方法:
(1)默认情况下的Object类的原生的equals方法,用于比较对象的内存地址,此时与==是等价的。
(2)类中覆盖了原生的equals方法,就需要根据代码具体判断。一般覆盖后的新equals方法都是比较对象的内容,如String类。
3.hashCode方法:返回一个hash码
(1)Object类提供的默认实现保证了每个对象的hash码都不同(在对象的内存地址的基础上经过特定算法返回一个hash码)
(2)如果a = b, 则hash(a) = hash(b);
(3)如果a != b, 则hash(a)和hash(b)可能得到相同的散列值
(4)hashCode方法能够将插入元素迅速定位到它的位置(其中还涉及到冲突碰撞的问题)
4.equals方法和hashCode方法的关系:
(1)如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
(2)如果两个对象不equals,他们的hashcode有可能相等。
(3)如果两个对象hashcode相等,他们不一定equals。
(4)如果两个对象hashcode不相等,他们一定不equals。
(5)因此,若重写equals(Object obj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。