[英]How to override equals to and tostring methods
我试图弄清楚它是如何工作的。 我认为这些方法存储在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;
}
}
你只是在检查身份,这不是你想要的。 看看这个关于实现equals()的好参考 :正如他们所提到的那样
equals通常应该比较状态,而不是身份。 对于映射到数据库记录的“以数据为中心”的类尤其如此。
在这个例子中,我重写了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;
}
这种问题已被无数次回答。
如果您使用的是Eclipse IDE,它会为您提供默认情况下生成,equals,hashCode和toString函数的功能。
你还必须在equals方法中使用某种类变量来进行比较。
请做一个谷歌搜索被这个话题的无数结果吹走
当应用于Object
的实例时, ==
运算符检查是否在对该Object
的同一实例的两个引用之间进行比较。 如果使用相同的地址,城市,州和邮政编码创建了两个Address
实例,则==
运算符在用于比较这两个不同的实例时将返回false
。 您需要使用函数覆盖Address
上的equals()
以显式检查4个字段中的每个字段是否匹配,并在这种情况下返回true
。
构建一个声音equals()
重写实现是很难的,你应该检查其他海报提供的链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.