ref:http://www.cnblogs.com/skywang12345/p/3324958.html

1、==作用:

  java中的==用来判断两个对象的地址是否相等;当对象是基本数据类型时,可以用来判断值是否相等?这句话有毛病!!!(直接用数值时?)

  http://www.cnblogs.com/whtblog/p/9029208.html中的part2.2,中的例子两个String也不能用"=="来判断值相等。

2、equals():

  Object类中定义的equals()方法, return (this == obj); 通过==来判断,很多JAVA类重写了equals方法,java对equals方法的重写要求需满足以下条件: 

1. 对称性:如果x.equals(y)返回是"true",那么y.equals(x)也应该返回是"true"。
2. 反射性:x.equals(x)必须返回是"true"。
3. 类推性:如果x.equals(y)返回是"true",而且y.equals(z)返回是"true",那么z.equals(x)也应该返回是"true"。
4. 一致性:如果x.equals(y)返回是"true",只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是"true"。
5. 非空性,x.equals(null),永远返回是"false";x.equals(和x不同类型的对象)永远返回是"false"。

  如下:

 @Override
public boolean equals(Object obj){
if(obj == null){
return false;
} //如果是同一个对象返回true,反之返回false
if(this == obj){
return true;
} //判断是否类型相同 ,返回对象的运行时类。
if(this.getClass() != obj.getClass()){
return false;
} Person person = (Person)obj;
return name.equals(person.name) && age==person.age; //调用了String类的equals方法
}

3、hashCode():

  1、在用到散列表时,hashCode()方法才需要重写并发挥作用!

   hashCode():获取哈希码,返回一个int类型的整数。当需要将该类放入散列表(如HashMap)时,才需要用到hashCode方法判断存放地址,在该地址上已存在的对象中用equals去判断值是否相等。如果跳过hashCode判断,有可能出现如下情况:存入对象o1与存在对象o2值(属性值)相同,此时应该用o1替换掉o2,但是由于o1.hashCode()!=o2.hashCode(),(调用的是未重写的hahsCode方法),散列表在哈希码对应的地址处没有元素,则将o1放入该地址。这样造成了HashMap中存在两个相同的对象,违背了HashMap的设计原则。

  2、在如HashMap,Hashtable,HashSet等散列表中,equals()方法的重写需要hashCode()方法的重写,遵循:

    

(1):若o1.equals(o2)==true,则必须有o1.hashCode()==o2.hashCode(),反之不成立;
(2):若o1.equals(o2)!=true,则hashCode可以相等也可以不等;

  

以上纯属个人理解!

    

       

  

最新文章

  1. javascript 表单
  2. 初学HTML 常见的标签(二) 列表标签
  3. HEXO+PAGE 搭建个性博客
  4. 工具类HttpServerUtility
  5. windows下mysql主从同步备份步骤
  6. OLAP如何实现数据的聚合计算-分析过程
  7. SIMATIC IT HISTORIAN在烟用二醋酸纤维素生产中应用
  8. DexIndexOverflowException: Cannot merge new index 66080 into a non-jumbo instruction!
  9. UIView用户事件响应
  10. EasyUI的使用步骤
  11. MongoDB--操作符
  12. Linux安装mysql(Redhat6.5+MySQL5.7)(转载+原创补漏)
  13. 深度学习与计算机视觉:基于Python的神经网络的实现
  14. 保存标注对象到txt 制作xml
  15. 使用Mybatis Generator插件自动生成映射文件(cmd无法进入文件,dns服务器对区域没有权威等问题)遇到问题
  16. 专题2:最长上升子序列LIS
  17. MySql连接空闲8小时自动断开引起的问题
  18. Sublime Text3—Project(项目管理)
  19. Python3练习题系列(02)
  20. 五、LCD屏填充纯色

热门文章

  1. 操作指南:如何利用Smartbi、Tableau实现地图可视化展示
  2. oj教程--深度优先DFS
  3. 洛谷P3267.侦察守卫
  4. Docker入坑系列(二)
  5. 初识html及网络爬虫概念
  6. python初略复习(2)及python相关数据分析模块的介绍
  7. python3中zip()的用法
  8. laravel7 路由引入,避免上线路由不统一
  9. https 加密原理
  10. Goland 时间转换的那些事