- Java类
- Java包
- Java方法
- Java访问
- Java创建
- Java对象(Object)
- Java内部类
- Java继承
- Java抽象类
- Java泛型类
- Java异常
- Java接口
- Java枚举
- Java注解
Java对象相等比较(Equals)
以下代码显示如何实现equals()
和hashCode()
方法
class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } /* implement the equals() method */ public boolean equals(Object otherObject) { // Are the same? if (this == otherObject) { return true; } // Is otherObject a null reference? if (otherObject == null) { return false; } // Do they belong to the same class? if (this.getClass() != otherObject.getClass()) { return false; } // Get the reference of otherObject in a SmartPoint variable Point otherPoint = (Point) otherObject; // Do they have the same x and y co-ordinates boolean isSamePoint = (this.x == otherPoint.x && this.y == otherPoint.y); return isSamePoint; } /* * implement hashCode() method of the Object class, which is a requirement * when you implement equals() method */ public int hashCode() { return (this.x + this.y); } } public class Main { public static void main(String[] args) { Point pt1 = new Point(10, 10); Point pt2 = new Point(10, 10); Point pt3 = new Point(12, 19); Point pt4 = pt1; System.out.println("pt1 == pt1: " + (pt1 == pt1)); System.out.println("pt1.equals(pt1): " + pt1.equals(pt1)); System.out.println("pt1 == pt2: " + (pt1 == pt2)); System.out.println("pt1.equals(pt2): " + pt1.equals(pt2)); System.out.println("pt1 == pt3: " + (pt1 == pt3)); System.out.println("pt1.equals(pt3): " + pt1.equals(pt3)); System.out.println("pt1 == pt4: " + (pt1 == pt4)); System.out.println("pt1.equals(pt4): " + pt1.equals(pt4)); } }
上面的代码生成以下结果。
pt1 == pt1: true pt1.equals(pt1): true pt1 == pt2: false pt1.equals(pt2): true pt1 == pt3: false pt1.equals(pt3): false pt1 == pt4: true pt1.equals(pt4): true
这里是equals()
方法实现的规范。 假设x
,y
和z
是三个对象的非空引用。
- 自反性。 表达式
x.equals(x)
应该返回true
。 - 对称性。 如果
x.equals(y)
返回true
,那么y.equals(x)
也必须返回true
。 - 传递性。如果
x.equals(y)
返回true
,那么y.equals(z)
也返回true
,则x.equals(z)
必须返回true
。 - 一致性。如果
x.equals(y)
返回true
,它应该保持返回true
,直到x
或y
的状态被修改。 如果x.equals(y)
返回false
,它应该保持返回false
,直到x
或y
的状态被修改。 - 与
null
引用的比较:任何类的对象不应等于null
引用。 表达式x.equals(null)
应始终返回false
。 - 与
hashCode()
方法的关系:如果x.equals(y)
返回true
,x.hashCode()
必须返回与y.hashCode()
相同的值。
上一篇:Java哈希编码
分类导航
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
关注微信小程序
扫描二维码
程序员编程王