2016-07-23 20 views
-2

私は私の質問は、&「ハッシュ」を「オフセット」しているもの、であるString.hashCode()の変数 "offset"& "hash"とは何ですか?

public int hashCode() { 
    int h = hash; 
    if (h == 0) { 
     int off = offset; 
     char val[] = value; 
     int len = count; 

     for (int i = 0; i < len; i++) { 
      h = 31*h + val[off++]; 
     } 
     hash = h; 
    } 
    return h; 
    } 

)これはString.hashCodeのソースコード(であることを読みましたか?私は "値"は実際の文字列で、 "長さ"は長さですが、他の2つは何かを理解できません。

+4

contextの 'String'ソースコードの* rest *です。 –

+1

@AndyTurnerありがとう、8と7をチェックしました –

+1

ソースコードの['offset'](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/)のコメントを読んでください。 6-b14/java/lang/String.java#116)と['hash'](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java /lang/String.java#122)。 –

答えて

0

オフセットは、文字列のcharのvalue []配列の最初のインデックスです。 ハッシュ変数は、より効率的になるようにhashCodeをキャッシュするためのフィールドです(hashCode()メソッドは、現在の値が0の場合のみハッシュを計算し、それ以外の場合はキャッシュされたハッシュを返します)

関連する問題