[英]why does it print “tostring” twice?
這是我的課,請解釋為什么它兩次打印“ tostring”
public class HashCodeAndEquals
{
static String asd;
public HashCodeAndEquals(String string) {
asd = string;
}
/**
* @param args
*/
public static void main(String[] args) {
HashCodeAndEquals obj1 = new HashCodeAndEquals("one");
HashCodeAndEquals obj2 = new HashCodeAndEquals("two");
System.out.println(obj1.toString());
//System.out.println(obj2.toString());
System.out.println(obj1.equals(obj2));
System.out.println(obj1==obj2);
}
@Override
public String toString() {
// TODO Auto-generated method stub
System.out.println("tostring");
return "tostring";
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
System.out.println("hashcode");
return 0;
}
}
為什么它兩次調用toString方法? 在什么時候調用哈希碼,並且hashcode()調用tostring()或被toString()調用?
不要在toString()
方法中進行System.out.println(...)
調用,因為這沒有任何意義。 此方法的目標不是打印字符串,而是返回字符串,調用者可以隨后決定該字符串做什么,包括打印出來或在GUI中顯示它,等等。
所以改變這個:
public String toString() {
System.out.println("tostring");
return "tostring";
}
對此:
public String toString() {
return "tostring";
}
順便說一句,System.out.println方法會在要打印的對象上自動調用toString()
,因此無需從method參數內部顯式調用此方法。
因此,您可以更改此設置:
System.out.println(obj1.toString());
更簡潔:
System.out.println(obj1);
另外,您打算更改您的hashCode()
方法,對嗎?
關於,
在什么時候調用哈希碼,並且hashcode()調用tostring()還是被toString()調用?
您的程序應准確告訴您何時調用hashCode()
,因為您的重寫中包含println。 如果將對象放置在HashSet中或將其用作HashMap的鍵,則將調用該方法。 檢查集合中的相等性時也使用它(我相信),但是請測試您的代碼以查看何時和何處使用它。 還可以通過使hashCode返回非0值來使hashCode更加有用,該值取決於類的鍵字段的狀態,即equals
方法測試中使用的相同字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.