Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用book equals()方法(可能使用hashCode()编写一个函数?_Java_Oop_Netbeans_Equals_Hashcode - Fatal编程技术网

Java 如何使用book equals()方法(可能使用hashCode()编写一个函数?

Java 如何使用book equals()方法(可能使用hashCode()编写一个函数?,java,oop,netbeans,equals,hashcode,Java,Oop,Netbeans,Equals,Hashcode,如何编写equals()方法?我需要能够写一个在程序中比较扑克牌有用的一个。我正在使用NetBeans编写代码 我还注意到equals()方法通常与hashCode()方法一起出现。hashCode到底要做什么,应该如何编写 那么,如果需要的话,我应该如何编写一个a by book equals()方法和一个hashCode()方法呢 我将发布我昨天完成的两个equals()方法,如果有人特别需要关于我的程序的其他信息,请告诉我,我将添加其余的 这是我当前的设置,不幸的是,它总是打印出相同的输

如何编写equals()方法?我需要能够写一个在程序中比较扑克牌有用的一个。我正在使用NetBeans编写代码

我还注意到equals()方法通常与hashCode()方法一起出现。hashCode到底要做什么,应该如何编写

那么,如果需要的话,我应该如何编写一个a by book equals()方法和一个hashCode()方法呢


我将发布我昨天完成的两个equals()方法,如果有人特别需要关于我的程序的其他信息,请告诉我,我将添加其余的

这是我当前的设置,不幸的是,它总是打印出相同的输出(false)

这是(我认为)我最初使用的equals()方法

@Override
public boolean equals(Object otherObject)
{
if (otherObject == null)
{
    System.out.println("Match");
    return false;
}
if (getClass() != otherObject.getClass())
{
    System.out.println("Match");
    return false;
}

System.out.println("No Match, True");
PlayingCard other = (PlayingCard) otherObject;
return suit.equals(other.suit) && rank == other.rank;
}

equals方法应该比较确定相等性的对象的属性

因此,第二个版本比第一个版本更有意义(因为第一个版本只测试引用相等,这已经在对象类的默认实现中完成)

不过,您可以使用更干净的实现:

@Override
public boolean equals(Object otherObject)
{
    if (otherObject == null)
    {
        return false;
    }
    if (!(otherObject instanceof PlayingCard))
    {
        return false;
    }
    if (this == otherObject) {
        return true;
    }
    PlayingCard other = (PlayingCard) otherObject;
    return suit.equals(other.suit) && rank == other.rank;
}
hashCode
由需要哈希函数的数据结构使用(
HashSet
HashMap
等)。它确定元素将存储在这些数据结构中的何处,因此,如果两个对象相等,则它们必须具有相同的哈希代码

换句话说,您的
hashCode
实现应该与
equals
实现匹配,这样如果
a.equals(b)
那么
a.hashCode()==b.hashCode()
。因此,在您的示例中,
hashCode
应该是
suit
rank
属性的函数

例如:

@Override
public int hashCode ()
{
    return Objects.hash(suit,rank);
}

对于任何生产代码,我总是使用apache EqualBuilder和HashCodeBuilderDoes Objects.hash,它们来自Java SE API或外部库?我刚刚在这里输入了代码来尝试,但我通过netbeans收到了错误通知。首先,它找不到这些<代码>其他<代码>和<代码>对象<代码>符号/变量,以及那些<代码>!otherObject对一元运算符不好,尤其是
@SIHB007您应该导入
java.util.Objects
(假设您使用java 7或更高版本编译代码)!otherObject是一个输入错误,我忘记了括号。另一个也是输入错误-我将编辑答案。@SIHB007修复了输入错误。@hexafraction java.util.Objects自java 7以来就在java SE API中。
@Override
public int hashCode ()
{
    return Objects.hash(suit,rank);
}