我正在试图弄清楚它是如何工作的。我认为这些方法存储在java.lang.Object中,但我无法弄清楚如何在代码中覆盖它们。这是我设计的一个小程序来测试我的理解(这是不对的)。
AddressTester:
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;
}
}
答案 0 :(得分:1)
你只是在检查身份,这不是你想要的。 看看这个关于实现equals()的好reference:正如他们提到的那样
equals通常应该比较状态,而不是身份。这是 对于映射到数据库的“以数据为中心”的类尤其如此 记录。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
这种问题已被无数次回答。
如果您使用的是Eclipse IDE,它默认为您提供生成,equals,hashCode和toString函数的功能。
你也必须在equals方法中使用某种类变量进行比较。
请做一个谷歌搜索被这个主题的无数结果所震撼
答案 3 :(得分:0)
==
运算符在应用于Object
的实例时,会检查是否在对{{1}的同一实例的两次引用之间进行了比较}。如果使用相同的地址,城市,州和邮政编码创建了Object
的两个实例,Address
运算符在用于比较这两个不同的实例时将返回==
。您需要使用函数覆盖false
上的equals()
,以明确检查4个字段中的每个字段是否匹配,并在这种情况下返回Address
。
构建一个声音true
覆盖实现是很难的,你应该检查其他海报提供的链接。