テストでこの質問に遭遇したので、それを共有したいと思います。質問は次のとおりです。 (x.equals(y) == true) の場合、2 つの文字列変数は存在しますか。 ? ハッシュコードの実装が異なりますが、その判断は正しいでしょうか? 回答: 違います。それらは同じハッシュ コード値を持っています。 分析: この質問は主に String オブジェクトのアクセス方法を調べます。まず、String 変数のハッシュ コード値が何であるかを明確にする必要があります。メモリに保存された String オブジェクトの状態は、ハッシュ テーブルに保存されます。異なる文字列が生成されると、その文字列のハッシュ コードが hashCode() メソッドによって取得され、ハッシュが返されます。コードの型は int です。 String オブジェクトのハッシュ コードは、次の式に従って計算されます: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] 注: int アルゴリズムを使用します。s[i] は文字列の i 番目の文字、n は文字列の長さ、^ は累乗を意味します。 (空文字列のハッシュ値は0です。) String型データのhashCode()メソッドは、ObjectクラスのhashCode()メソッドを継承しており、ハッシュテーブル(java.util.Hashtable)の性能向上を主な目的としています。 。 アクセス効率を最適化します。2 つの同一の宣言文字列が出現した場合、新しいオブジェクト インスタンスは再作成されませんが、既存のハッシュ コードが返され、対応する参照に渡されます。 HashCode の一般的な取り決めを紹介します。これは大まかに次のとおりです。 Java アプリケーションの実行中、同じオブジェクトに対して hashCode メソッドが 2 回呼び出された場合、同じ整数を一貫して返す必要があります。ただし、比較するときに使用される情報が条件となります。オブジェクト等しいは変更されていません。この整数は、アプリケーションの 1 つの実行から次の同じアプリケーションの実行まで同じである必要はありません。 equals(Object) メソッドに従って 2 つのオブジェクトが等しい場合 (注: この質問は典型的な例です)、2 つのオブジェクトのそれぞれの結果に対して hashCode() メソッドが呼び出されたときに同じ整数が生成されなければなりません。 2 つのオブジェクトが、equals(java.lang.Object) メソッドに従って等しくない場合、どちらかのオブジェクトで hashCode() メソッドを呼び出しても、異なる整数の結果が生成されるとは限りません。ただし、実際のアプリケーションでは、オブジェクトごとに異なる整数の結果を生成すると、ハッシュ テーブルのパフォーマンスを向上させることができます。
この記事は CSDN ブログからのものです。転載する場合は出典を明記してください: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx
-