興味深いのは、java.lang.StringのhashCode()メソッドが静的でない理由は何ですか? そしてヌル返品の場合。 -1? 頻繁ようsomethihgを行う必要があるため:Java文字列hashCode null string
String s;
.............
if (s==null) {
return 0;}
else {
return s.hashCode();
}
感謝を。
興味深いのは、java.lang.StringのhashCode()メソッドが静的でない理由は何ですか? そしてヌル返品の場合。 -1? 頻繁ようsomethihgを行う必要があるため:Java文字列hashCode null string
String s;
.............
if (s==null) {
return 0;}
else {
return s.hashCode();
}
感謝を。
hashCode
は、Object
上のメソッドであり、本質的にオブジェクト/インスタンスに頼っている(つまり、それに属している)ため非静的です。非nullまたは0
そうですo.hashCode()
o
あれば返します。Java 7は正確に何をしたいんhashCode(Object)
方法を、持っているObjects
クラスを、導入
注意。
equals(Object, Object)
,toString(Object)
などの他の方法もあります。null
の値を扱うクラスもあります。
返されるhashCodeはObject
で、クラスではありません。
静的である場合は、"1".hashCode()
と"2".hashCode()
が同じ値を返すため、明らかに間違っています。
インスタンスごとに固有であり、影響を受けるため、静的にすることはできません。
間違っています:静的でない[String.hashCode()](http://docs.oracle.com/javase/7/docs/api/java/lang)に沿って静的な 'hashCode(String) /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
は、オブジェクトのハッシュコードを取得するために使用され、HashMap
のバケットが配置される必要があることを認識します。したがって、オブジェクトのインスタンスメソッドでなければならず、多態的に呼び出さなければなりません。
null
は、HashMapのキーとして使用できますが、特別なケースとして扱われます。
あなたは異なる目的でhashCodeを使用しているようですので、特別な方法で処理する必要があります。
静的な場合は非常に便利なハッシュではありません。 (そして、hashCodeはObjectのメソッドであることに注意してください) –
(nullのためのパラメータをチェックする独自のstatic myHashメソッドを書くことはもちろん可能です) –
'static int hashCodeOf(Object o){return(o!= null) )? o.hashCode():0; } ' – oliholz