java - 如何检查2个类实例是否相同

标签 java equals

例如我有一个水果类。我创建了 2 个实例:

Fruit apple = new Fruit("apple");
Fruit orange = new Fruit("orange");

2 个实例的值不同,因此我正在寻找错误的答案。我重写了 .equals() 方法并编写了以下方法来进行测试:
@Override
public boolean equals(Object otherObject){
    if(otherObject instanceof Fruit){ 
        return true;
    }
    return false; 
}

    if(apple.equals(orange))
        System.out.println("true"); 
    else
        System.out.println("false");

上述方法给了我正确的答案。根据我的理解,这是一个正确的响应,因为这只是测试它们是否属于同一类,这是真的。

但我无法测试实例本身的值。请指教。谢谢。

最佳答案

您应该包含您的 Fruit类,但这是一种方法

static class Fruit {
  private String name;

  public Fruit(String name) {
    this.name = name;
  }

  @Override
  public boolean equals(Object otherObject) {
    // check for reference equality.
    if (this == otherObject) {
      return true;
    }
    if (otherObject instanceof Fruit) {
      Fruit that = (Fruit) otherObject;
      // Check for name equality.
      return (name == null && that.name == null)
          || name.equals(that.name);
    }
    return false;
  }
}

public static void main(String[] args) {
  Fruit apple = new Fruit("apple");
  Fruit apple2 = new Fruit("apple");

  Fruit orange = new Fruit("orange");

  if (apple.equals(orange))
    System.out.println("true");
  else
    System.out.println("false");

  // You can also use the shorter
  System.out.println(apple.equals(apple2));
}

输出
false
true

关于java - 如何检查2个类实例是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707840/

相关文章:

java - servlet api 试图解决什么问题?

c# - 比较两个对象的值而不列出每一列

python - 如何将表示 Bash 命令元素的列表元素组合到具有等于符号的新列表中

java - 我如何找到导致内存泄漏的应用程序

java - 用于包装请求正文的 Sling Filter

java - Fedora OpenJDK 设置 JAVA_HOME

java - 导出后出现 FileSystemNotFoundException

java - 使用比较器聚合相似的对象,而不与 equals() 保持一致

C# SortedSet<T> 和相等性

java - 比较两个 JSON 对象的数字容差