下载APP 编程狮,随时随地学编程
返回 首页

Java 教程

Java Object.Equals方法

Java面向对象设计 - Java Object.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));
  }
}

上面的代码生成以下结果。

注意

这里是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的状态被修改。
  • 与空引用的比较:任何类的对象不应等于空引用。表达式x.equals(null)应始终返回false。
  • 与hashCode()方法的关系:如果x.equals(y)返回true,x.hashCode()必须返回与y.hashCode()相同的值。


目录

Java 类

Java 类实例
Java 访问级别

Java 包

Java 导入

Java 方法

Java 方法
Java 方法返回
Java 方法重载
Java 实例/静态方法
Java 主方法
Java 参数传递
Java varargs方法

Java 访问

Java this关键字
Java 访问级别成员
Java final关键字

Java 创建

Java 构造函数
Java 初始化块

Java 对象

Java Object类
Java HashCode(哈希码)
Java Object.Equals方法
Java Object.toString方法
Java Object.Clone方法
Java Object.Finalize方法
Java Immutable(不可变)对象
Java Objects类

Java 内部类

Java 内部类
Java 内部类类型
Java 静态对象类
Java 内部类对象
Java 内部类成员

Java 继承

Java 继承
Java 方法重写
Java 继承和构造函数
Java 继承隐藏

Java 抽象类

Java 抽象类和方法

Java 泛型类

Java 泛型类
Java 泛型约束
Java 泛型方法和构造函数

Java 异常

Java 异常处理
Java 异常类
Java 异常抛出
Java 自定义异常
Java 终止块
Java 异常使用

Java 接口

Java 接口
Java 接口字段
Java 接口方法
Java 接口类型
Java 接口实现
Java 接口继承

Java 枚举

Java 枚举类型
Java 枚举值
Java 枚举类
Java 枚举方法
Java 枚举主体
Java 枚举比较

Java 注释

Java 注释
Java 对注释类型的限制
Java 注释默认值
Java 注释用法
Java 注释类型
Java 标准注释
Java 注释反射

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }