Java对象的equals方法分析与重写
来源:互联网 发布:lr监控windows资源 编辑:程序博客网 时间:2024/06/06 01:04
Java中,对于对象的比较,如果用“==”比较的是对象的引用,'=='运算符比较两个对象的地址;
equals才是比较的对象的内容,且Object类的equals方法的默认实现也是按照内存地址比较对象是否相等。
Javaequals方法有以下特性:
1、自反性:对任意引用值X,x.equals(x)的返回值一定为true.
2、对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
3、传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
4、一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
5、非空性:任何非空的引用值X,x.equals(null)的返回值一定为false
所以重写equals()方法时,要满足以上五个特性并且要根据实例域的类型进行不同的比较:
1、对象域,使用equals方法
2、 类型安全的枚举,使用equals或==
3、可能为null的对象域 : 使用 == 和 equals
4、数组域 : 使用 Arrays.equals
5、除float和double外的原始数据类型 : 使用 ==
6、float类型: 使用Float.foatToIntBits转换成int类型,然后使用==
7、double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==
public class TbSpinfo{ private String id; //id属性 private String spname; //商品名称 public String getId() {return id; } public void setId(String id) {this.id = id;
} public String getSpname() {return spname;
} public void setSpname(String spname) {this.spname = spname; }
public boolean equals(Object obj) { if(this == obj) return true; //自反性:对任意引用值X,x.equals(x)的返回值一定为true. if(obj == null) return false; //非空性:任何非空的引用值X,x.equals(null)的返回值一定为false if(getClass() != obj.getClass()) return false; //自反性:对任意引用值X,x.equals(x)的返回值一定为true. final TbSpinfo other = (TbSpinfo)obj;
//进行域的比较 if(id == null) //先判断类中bz变量是否为空,可能为null的对象域 { if(other.id != null) //判断引用变量other中bz是否为空,可能为null的对象域 return false; }else if(!id.equals(other.id)) return false; //传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true if(spname == null) { if(other.spname != null) return false; }else if(!spname.equals(other.spname)) return false;
return true;
}
}
本文借鉴了denlee的关于实例域的类型进行不同的比较的部分,大家可以参见他的博客内容。http://blog.csdn.net/denlee/article/details/3081722
- Java对象的equals方法分析与重写
- java对象equals方法的重写
- java对象equals方法的重写
- java对象equals方法的重写
- java对象equals方法的重写
- java对象equals方法的重写
- 22-JAVA面向对象-重写toString()与equals()方法
- java equals方法的重写
- java:equals方法的重写
- Java对象判等,重写equals方法
- java equals与hashCode 两个重要方法的重写
- JAVA中自定义对象比较时重写equals()方法的同时要重写hashcode()方法
- 为什么要重写java中对象的equals方法和hashCode方法以及如何重写
- 重写对象的equals(Object)方法,同时重写Hashcode()方法
- Java中==与equals的区别(可以试下重写hashcode与equals方法)
- JAVA重写equals方法
- JAVA重写equals方法
- java 重写equals方法
- Dijkstra — 最短路径算法
- 已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行,如何解决
- 周工作总结及计划表
- bzoj2938: [Poi2000]病毒
- 使用apktool编译以及反编译apk文件
- Java对象的equals方法分析与重写
- python循环语句
- Shell下获取系统时间及转换为时间戳的方法
- joomla开发新手第一天
- 九度oj 1064
- C# 弹出窗体位置设定
- [多校2015.01.1010 容斥+迭代] hdu 5297 Y sequence
- Least Common Multiple
- MapReduce的NlineInputFormat