唯一有趣的是,爲什麼hashCode()在java.lang.String中不是靜態的? 而且在空返回的情況下,例如-1? 由於經常需要做somethihg,如:Java String hashCode爲空字符串
String s;
.............
if (s==null) {
return 0;}
else {
return s.hashCode();
}
感謝。
唯一有趣的是,爲什麼hashCode()在java.lang.String中不是靜態的? 而且在空返回的情況下,例如-1? 由於經常需要做somethihg,如:Java String hashCode爲空字符串
String s;
.............
if (s==null) {
return 0;}
else {
return s.hashCode();
}
感謝。
正如其他人已經注意到的hashCode
是Object
上的方法,並且是非靜態的,因爲它固有地依賴(即屬於)對象/實例。
注意,Java 7中引入了Objects
類,它有hashCode(Object)
方法,它正是你想要的:返回o.hashCode()
如果o
非空或0
其他。
該課程還有其他方法處理可能的值,例如equals(Object, Object)
,toString(Object)
等。
它返回的hashCode不是一個類Object
。
因爲如果它是靜態的"1".hashCode()
和"2".hashCode()
會返回相同的值,這顯然是錯誤的。
它是特定的每個實例,並受其影響,因此它不能是靜態的。
錯誤:如果沿着非靜態[String.hashCode()]提供靜態'hashCode(String)'(http://docs.oracle.com/javase/7/docs/api/java/lang /String.html#hashCode%28%29),可以像這樣調用'String.hashCode(「1」)',或者如果忽略警告''2「.hashCode(」1「)'。這兩個調用都會返回相同的值。 –
@bernardpaulus但問題不是關於'hashCode(String)',而是關於'hashCode()'(未參數化)。 – amit
一個沒有參數的靜態'String.hashCode()'沒有多大意義(甚至不應該編譯,因爲它不能重載[Object.hashCode()](http://docs.oracle.com/javase/7/docs /api/java/lang/Object.html#hashCode%28%29))。另外,'foo()'表示法通常用於指示'foo'是一個函數,而不指定參數。 –
因爲String的哈希碼是該String的屬性。
使用相同的思路,您可以使每種方法都是靜態的。
hashCode
用於獲取對象的hashCode,以便知道該對象必須放置在哪個桶中。因此它必須是對象的一個實例方法,並且必須以多態方式調用它。
null
可用作HashMap中的鍵,但它被視爲一種特殊情況。
你似乎在使用hashCode來達到不同的目的,所以你必須以特定的方式來處理。
如果是靜態的,它不會是一個非常有用的散列。 (並且注意hashCode是Object的一個方法。) –
(當然,你可以編寫你自己的靜態myHash方法來檢查它的參數爲null。) –
'static int hashCodeOf(Object o){return(o!= null )? o.hashCode():0; }' – oliholz