首先,你的方法是錯誤的。您正在計算沒有從Object
覆蓋toString()
方法的類的字符串表示形式。
的Object.toString
方法,如果不被重寫時,返回一個由類,@
的名稱的字符串,並且對象的哈希碼。這不是它的地址,它與地址無關。因此,具有相同散列碼的兩個對象將返回相同的字符串。
爲了證明,讓我們來看看它覆蓋equals
和hashCode
但不會覆蓋toString
方法的小類:
class MyInteger {
int myInteger;
public MyInteger(int myInteger) {
this.myInteger = myInteger;
}
public int getInteger() {
return myInteger;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MyInteger) {
return myInteger == ((MyInteger)obj).myInteger;
}
return false;
}
@Override
public int hashCode() {
return myInteger;
}
}
現在,讓我們來試試你的區分兩個不同的對象的方法:
MyInteger int1 = new MyInteger(1004);
MyInteger int2 = new MyInteger(1004);
System.out.println(int1+" "+int2);
印刷會是這樣的結果:
[email protected] [email protected]
但很明顯,int1
和int2
指向兩個不同的對象,用new
明確創建!
因此,忘記這種方法 - 它沒有意義。
現在,你怎麼知道兩個對象是不同的?很簡單,請將參考文獻與==
或!=
進行比較。
所以,如果我嘗試了上述
System.out.println(int1 != int2);
其結果將是true
。
這是相同的字符串:
String a="helloworld";
String b="hello";
String c=b+"world";
String d="hello";
System.out.println("a refers to a different object than c? " + (a != c));
System.out.println("b refers to a different object than d? " + (b != d));
印刷的結果將是:
a refers to a different object than c? true
b refers to a different object than d? false
我很困惑,其答案選擇,因爲他們都是很好的,但我喜歡你的回答除了其他的是你hashCose javaspecs.Thanks – silentprogrammer