1、==用于比较左值和右值是否相等。比较的是值(包括int等基础类型值比较、对象的地址值比较等),而不是比较对象内容。
2、equals不但比较两个对象地址值是否一样,还比较两个对象内容是否相同,其中一个一样就返回true。即两个对象内容相同但是地址值不同也是返回true。判定的范围比“==”广。
3、hashCode()比较的是对象地址值转换后的哈希值是否一样。即使两个对象的hashCode值一样也不能判定两个对象地址值完全相同(原因是存在哈希冲突)。
因此有以下推论:
1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
2、如果两个对象不equals,他们的hashcode有可能相等。
3、如果两个对象hashcode相等,他们不一定equals。
4、如果两个对象hashcode不相等,他们一定不equals。