[英]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.