シナリオ: メッセージの送信者とメッセージの受信者がいます。メッセージの内容は xom.nu ドキュメントに変換され、受信者に渡されます。ここで面白いことが起こります。タグの 1 つ、つまりテキストには属性 (言語) があり、その値は文字列 "en" です。
送信者の「en」にはハッシュ値がありますが、受信者のハッシュはゼロであることが示されています。文字列のハッシュがゼロになる原因は何ですか?
送信者:
レシーバー:
内部だけで変数を検査するべきではありません。
この場合の問題は、フィールドがキャッシュhash
として機能していることです。がこのインスタンスで呼び出された場合にのみ、値が含まれます。hashCode()
見てみるyourVariable.hashCode()
と、hash
フィールドも変化することがわかります。
hashCode
メソッドのソースは次のとおりです。
1493 public int hashCode() {
1494 int h = hash;
1495 if (h == 0) {
1496 int off = offset;
1497 char val[] = value;
1498 int len = count;
1499
1500 for (int i = 0; i < len; i++) {
1501 h = 31*h + val[off++];
1502 }
1503 hash = h;
1504 }
1505 return h;
1506 }
値は、(最初に) を呼び出したときにのみ計算されることがわかりますhashCode
。hash
privateであるため、どちらでもかまいません。通常はhashCode
メソッドを使用してのみ取得できます。
あなたの明確な質問に答えるには:文字列のハッシュ(によって返されるhashCode
)は0
空の文字列用です(ただし、空の文字列だけではありません)。