繁体   English   中英

如何检查价值平等?

[英]How to check for value equality?

我是Java入门者,所以请忍受这个。

我有一堂课:

class Point {
  public int x;
  public int y;

  public Point (int x, int y) {
    this.x = x;
    this.y = y;
  }
}

我创建两个实例:

Point a = new Point(1, 1);
Point b = new Point(1, 1);

我想检查这两点是否在同一位置。 if (a == b) { ... }的明显方法不起作用,因为这似乎是“ 对象是否相等?” 一种测试,这不是我想要的。

我可以做到if ( (ax == bx) && (ay == by) ) { ... } ,但是这种解决方案感觉不太好。

如何以优雅的方式获取两个Point对象并测试它们是否相等,协调一致?

标准协议是实现equals()方法:

class Point {
  ...
  @Override
  public boolean equals(Object obj) {
    if (!(obj instanceof Point)) return false;
    Point rhs = (Point)obj;
    return x == rhs.x && y == rhs.y;
}

然后,您可以使用a.equals(b)

请注意,完成此操作后,还需要实现hashCode()方法。

对于像您这样的类,我经常使用Apache Commons LangEqualsBuilderHashCodeBuilder

class Point {
  ...

  @Override
  public boolean equals(Object obj) {
    return EqualsBuilder.reflectionEquals(this, obj);
  }

  @Override
  public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
  }
}

您将要覆盖hashCode()equals()方法。 如果您使用的是Eclipse,则可以通过转到Source -> Generate hashCode() and equals()..来让Eclipse为您完成此操作。 覆盖这些方法后,可以调用:

if(a.equals(b)) { ... }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM