当前位置: 首页 > 面试题库 >

如何检查价值平等?

傅恺
2023-03-14
问题内容

我是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 ( (a.x == b.x) && (a.y == b.y) ) { ... },但是那种解决方案感觉不好。

如何以优雅的方式获取两个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
Lang
EqualsBuilderHashCodeBuilder

class Point {
  ...

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

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


 类似资料:
  • 问题内容: float(‘nan’)结果为Nan(不是数字)。但是,如何检查呢?应该很容易,但是我找不到。 问题答案: 返回如果为(非数字),以及其他。

  • 如何检查由数组表示的给定完整二叉树是否是值平衡二叉树?我所说的值平衡是指,如果对于每个节点,左手边节点的整数值之和等于右手边的值之和。什么是类C算法?找出有孩子的节点的索引很容易。但是我无法开发递归计算每个节点总和的逻辑。还需要以这样一种方式计算总和,即特定节点下方左子树的所有节点的总和将等于它的右手对应物,并以类似的方式向下挖掘。怎么可能使用数组?

  • 问题内容: 我想测试输入的String是否平衡。如果有匹配的左,右括号,括号或花括号,则将是平衡的。 我在选择做什么时遇到问题。我是否应该将每个左括号或右括号,方括号或大括号放在堆栈中,然后弹出它们?如果我将它们弹出,那对我有什么帮助? 问题答案: 1)对于每个开口支架:将其推入堆栈。 2)对于每个右括号:从堆栈中弹出并检查括号的类型是否匹配。如果不退货; 即 String中的当前符号是,如果从堆

  • 我想测试输入字符串是否平衡。如果有一个匹配的开始和结束括号、括号或大括号,这将是平衡的。 我在选择做什么时遇到了问题。我是否应该将每个开始或结束的括号、括号或大括号放在一个堆栈中,然后将它们弹出?如果我把它们拿出来,这对我有什么帮助?

  • 到目前为止,我们已经讨论了Jasmine中的不同方法,它们可以帮助我们根据我们的要求测试不同的场景。 在本章中,我们将了解不同的匹配器,它们将帮助我们检查JS文件中的不等式条件。 以下是用于此目的的匹配器。 toBeGreaterThan() 顾名思义,这个匹配器有助于检查大于条件。 让我们使用以下代码修改customerMatcher.js 。 describe("Different Metho

  • Jasmine提供了许多方法来帮助我们检查任何JavaScript函数和文件的相等性。 以下是检查平等条件的一些示例。 toEqual() toEqual()是内置的Jasmine库中最简单的匹配器。 它只是匹配作为此方法的参数给出的操作的结果是否与其结果匹配。 以下示例将帮助您了解此匹配器的工作原理。 我们有两个要测试的文件,名为“expectexam.js” ,另一个我们需要测试的文件是“ex