0

シナリオ: メッセージの送信者とメッセージの受信者がいます。メッセージの内容は xom.nu ドキュメントに変換され、受信者に渡されます。ここで面白いことが起こります。タグの 1 つ、つまりテキストには属性 (言語) があり、その値は文字列 "en" です。

送信者の「en」にはハッシュ値がありますが、受信者のハッシュはゼロであることが示されています。文字列のハッシュがゼロになる原因は何ですか?

送信者:

送信者画像

レシーバー:

レシーバー画像

4

2 に答える 2

9

内部だけで変数を検査するべきではありません。

この場合の問題は、フィールドがキャッシュhashとして機能していることです。がこのインスタンスで呼び出された場合にのみ、値が含まれます。hashCode()

見てみるyourVariable.hashCode()と、hashフィールドも変化することがわかります。

于 2013-09-11T15:50:00.007 に答える
5

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    }

値は、(最初に) を呼び出したときにのみ計算されることがわかりますhashCodehash privateであるため、どちらでもかまいません。通常はhashCodeメソッドを使用してのみ取得できます。

あなたの明確な質問に答えるには:文字列のハッシュ(によって返されるhashCode)は0空の文字列用です(ただし、空の文字列だけではありません)。

于 2013-09-11T15:51:00.740 に答える