0

我试图弄清楚这是如何工作的。我知道这些方法存储在 java.lang.Object 中,但我不知道如何在代码中覆盖它们。这是我设计的一个小程序来测试我的理解(这是不对的)。

地址测试器:

import java.util.ArrayList;
import java.util.Scanner;

public class AddressTester
{

    public static void main(String[] args)
    {

        Address home = new Address("123 Loving Fat Girl ln", "Dollywood", "NY",
                "98765");

        Scanner in = new Scanner(System.in);

        System.out.println("-- Enter your home address --");
        System.out.println("123 Loving Fat Girl ln, Dollywood, NY, 98765");

        System.out.print("Enter the street address: ");
        String addr = in.nextLine();

        System.out.print("Enter the city: ");
        String city = in.next();

        System.out.print("Enter the state: ");
        String state = in.next();

        System.out.print("Enter the zipcode: ");
        String zipcode = in.next();

        Address enteredAddress = new Address(addr, city, state, zipcode);

        System.out.println(enteredAddress);

        if (home.equals(enteredAddress))
        {
            System.out.println("You are correct!");
        }
        else
        {
            System.out.println("You are incorrect!");
        }

        ArrayList<Address> addresses = new ArrayList<Address>();
        addresses.add(home);

        if (addresses.contains(enteredAddress))
        {
            System.out.println("The address wasn't found");
        }
        else
        {
            System.out.println("The address was found");
        }

    }

}

地址:

public class Address
{
    private String address;
    private String city;
    private String state;
    private String zipcode;


    public Address(String address, String city, String state, String zipcode)
    {
        this.address = address;
        this.city = city;
        this.state = state;
        this.zipcode = zipcode;

    }

    public boolean equals(Object otherObject)
    {
        if(otherObject == this)
        {
            return true;
        }
        if(otherObject != this)
        {
            return false;
        }
        return true;
    }

    public String getAddress()
    {
        return address;
    }

    public void setAddress(String addr)
    {
        this.address = addr;
    }

    public String getCity()
    {
        return city;
    }

    public void setCity(String city)
    {
        this.city = city;
    }

    public String getState()
    {
        return state;
    }

    public void setState(String state)
    {
        this.state = state;
    }

    public String getZipcode()
    {
        return zipcode;
    }

    public void setZipcode(String zipcode)
    {
        this.zipcode = zipcode;
    }

}
4

4 回答 4

1

在这个例子中,我覆盖了 hashCode、toString 和 equals。我的标准是 equals 应该使用 SomeClass 的 someAttribute 在所述类实例之间定义 de equals() 。HashCode 应该以相同的方式与 equals 一起重新定义。

@Override
public String toString() {
     return "SomeClass [attribute=" + someAttribute + "]";
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + someAttribute;
    return result;
}
@Override
public boolean equals(Object obj) {
    if (obj == null)
        return false;       
    if (this == obj)
        return true;

    if (getClass() != obj.getClass())
        return false;
    SomeClass other = (SomeClass) obj;
    if (someAttribute != other.someAttribute)
        return false;
    return true;
}
于 2013-03-28T03:11:26.247 回答
1

您只是在检查身​​份,这并不是您真正想要的。看看这个关于实现 equals() 的好参考:正如他们提到的

equals 通常应该比较状态,而不是身份。对于映射到数据库记录的“以数据为中心”的类尤其如此。

于 2013-03-28T02:54:42.717 回答
0

这种问题已经回答了无数次了。

如果您使用的是 Eclipse IDE,它默认为您提供生成、equals、hashCode 和 toString 函数的功能。

您还必须在 equals 方法中使用某种类变量进行比较。

请进行谷歌搜索,以被关于该主题的无数结果所震撼

于 2013-03-28T02:53:40.050 回答
0

==运算符在应用于 的实例时,检查是否在对同一实例Object两个引用之间进行比较。如果创建了具有相同地址、城市、州和邮政编码的两个实例,则运算符将在用于比较这两个不同实例时返回。您需要使用一个函数覆盖on以显式检查 4 个字段中的每一个是否匹配,并在这种情况下返回。ObjectAddress==falseequals()Addresstrue

构建一个声音equals()覆盖的实现很难正确,您绝对应该查看其他海报提供的链接。

于 2013-03-28T03:01:54.433 回答