【问题标题】:java hashcode and equals [duplicate]java哈希码和等于[重复]
【发布时间】:2015-03-06 06:06:02
【问题描述】:

为下面的类创建 hashCode 和 equals 方法。

private static class MyOb {

    private String name;
    private Integer quality;
    private final int MAXIMUM = 23;

}

我无法解决这个问题

【问题讨论】:

  • 你想完成你的家庭作业吗?先下点功夫
  • 提示:查看任何 java 类的源代码,例如对象
  • 其实面试时被问到答不上来
  • nested 类吗?
  • 你得到这份工作了吗?

标签: java hashcode


【解决方案1】:

Java 类具有通过超类实现的默认 hashCode 和 equals 方法方法。如果你想超越它们,你可以通过以下方式:

class MyOb {

private String name;
private Integer quality;
private final int MAXIMUM = 23;

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + ((quality == null) ? 0 : quality.hashCode());
    return result;
}
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    MyOb other = (MyOb) obj;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    if (quality == null) {
        if (other.quality != null)
            return false;
    } else if (!quality.equals(other.quality))
        return false;
    return true;
}

}

注意:类不能是私有的或静态的

【讨论】:

  • 您为什么使用 MAXIMUM?这只是一个常数
  • 抱歉改了,谢谢提醒
  • 可能值得指出 Eclipse 生成哈希码/等于我猜你使用的。
  • 是的,使用 Eclipse IDE 生成代码,但我的目的是让他知道这些是默认方法,可以被覆盖
  • 谢谢,非常感谢
【解决方案2】:

如果你想查看类的哈希码。 创建对象

    Myob myObject=new Myob();
    System.out.println(myObject);

如果想要equals方法

    myObject.equals(which one you want to campare);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多