《java核心技术--卷一》equals方法
2014-05-03 14:25
393 查看
java语言规范要求equals的特性:
1)自反性:对于任何非空引用x,x.equals(x)应返还true。
2)对称性:对于任何x,y,x.equals(y)与y.equals(x) 返回值相同。
3)传递性:对于任何引用x,y,z,若x.equals(y),y.equals(z)则x.equals(z)
4)一致性:如果x和y引用的对象没有发生变化,则反复调用x.equals(y)的结果应一致。
5)对于任何非空引用x,x.equals(null)应返回false
equals方法是判断对象是否相等的方法。在Object类中,这个方法判断两个对象是否具有相同的引用。如果具有相同的引用则相等,否则不相等。但是这在实际使用中却没有太大意义。一般使用中是判断两个对象是否具有相同的状态,以此来判断对象是否相等。
如:Empolyee员工类的例子,需要测试name、age是否相等:
子类中定义equals方法时,首先调用父类的equals方法,若检测失败,对象就不肯能相等;若父类中域相等,则需继续检测子类的实力域。
继承中的相等测试:
当equals参数不属于同一类时,且具有继承关系时,instanceof的检测结果将不满足对称性。
如:c是p的子类,如果在equals中用instanceof检测,那么:
p.equals(c) 将返回true;
c.equals(p) 将返回false或者抛出异常。
编写equals方法的建议:
1、显示参数命名为otherObject,稍后强制转换为叫other的变量。
2、检测this==otherObject
3、检测this==null
4、检测getClass()!=otherObject.getClass()
如果所有的子类都拥有统一的语义,就使用instanceof检测
otherObject instanceof ClassName
5、将otherObject转换为相应类型的变量
6、比较所有的域
7、若在子类中重新定义了equals方法,则需在子类中包含调用super.equals(other)
5、
1)自反性:对于任何非空引用x,x.equals(x)应返还true。
2)对称性:对于任何x,y,x.equals(y)与y.equals(x) 返回值相同。
3)传递性:对于任何引用x,y,z,若x.equals(y),y.equals(z)则x.equals(z)
4)一致性:如果x和y引用的对象没有发生变化,则反复调用x.equals(y)的结果应一致。
5)对于任何非空引用x,x.equals(null)应返回false
equals方法是判断对象是否相等的方法。在Object类中,这个方法判断两个对象是否具有相同的引用。如果具有相同的引用则相等,否则不相等。但是这在实际使用中却没有太大意义。一般使用中是判断两个对象是否具有相同的状态,以此来判断对象是否相等。
如:Empolyee员工类的例子,需要测试name、age是否相等:
class Employee{ protected String name; protected int age; @Override public boolean equal 4000 s(Object obj){ if(this == obj) return true; if(obj == null) return false; if(getClass() != obj.getClass()) return false; Employee other = (Employee)obj; return name.equals(other.name)&&(age==other.age); } }
子类中定义equals方法时,首先调用父类的equals方法,若检测失败,对象就不肯能相等;若父类中域相等,则需继续检测子类的实力域。
class Manager extends Employee{ private String level; @Override public boolean equals(Object obj){ if(!super.equals(obj)) return false; Manager other = (Manager)obj; return level.equals(other.level); } }
继承中的相等测试:
当equals参数不属于同一类时,且具有继承关系时,instanceof的检测结果将不满足对称性。
如:c是p的子类,如果在equals中用instanceof检测,那么:
p.equals(c) 将返回true;
c.equals(p) 将返回false或者抛出异常。
编写equals方法的建议:
1、显示参数命名为otherObject,稍后强制转换为叫other的变量。
2、检测this==otherObject
3、检测this==null
4、检测getClass()!=otherObject.getClass()
如果所有的子类都拥有统一的语义,就使用instanceof检测
otherObject instanceof ClassName
5、将otherObject转换为相应类型的变量
6、比较所有的域
7、若在子类中重新定义了equals方法,则需在子类中包含调用super.equals(other)
5、
相关文章推荐
- java核心技术 equals方法 EqualTest.java
- java核心技术学习笔记8---equals()方法和hashCode()方法
- 《java核心技术--卷一》equals方法
- 重温java核心技术,equals方法实现建议
- 小博老师解析JavaWeb核心技术 ——JQuery常用方法
- Get方法中不要返回可变对象的引用 【Java2核心技术第一卷 读书笔记】
- 【Java核心技术】java 方法重写注意事项
- 【JAVA核心技术】本地方法
- java多线程编程核心技术笔记-停止线程interrupt()方法
- java 核心技术 卷1 第三章 常用方法
- JAVA核心技术 第四章 对象与类 方法参数
- 25.Java2核心技术—本地方法
- 使用java写一个没有main方法的“Hello World”程序(摘自java核心技术.卷I)
- 方法参数 java核心技术程序清单:4-4
- 核心技术笔记_重要的java.lang.string:、 String类中的一些重要的方法(2014.04.16 day36)
- 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ
- 小博老师解析JavaWeb核心技术 ——JQuery常用方法
- 四、java多线程核心技术——synchronized同步方法与synchronized同步快
- 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ
- Java高级技术第一章——equals方法与哈希编码(hashCode)