5

ハッシュコード メソッドがオーバーライドされていないシリアル化可能な Java オブジェクトがあり、その Java オブジェクトをネットワーク経由で送信し、受信側で Java オブジェクトを再構築すると、ハッシュコード メソッドは同じ値を返しますか?

それはJava APIまたはJVMに基づく実装依存で指定されたものですか?

4

4 に答える 4

5

Java 言語仕様、Java 仮想マシン仕様、またはオブジェクト シリアライゼーション仕様には、そう言っているものは何もありません。したがって、特定のケースで発生する可能性のある動作が何であれ、それに頼ることはできません。

于 2013-10-28T07:43:28.273 に答える
2

一時的なフィールドに依存している場合、他の人が言っているように、ハッシュコードの値は異なりますが、ハッシュコードの実装方法にも依存します。ハッシュコード メソッドが、一時オブジェクトまたはデフォルト メソッドのいずれかを使用するオブジェクトのハッシュコードに依存している場合 (またはそれ自体がそれらを使用するオブジェクトに依存している場合)、ハッシュコードは異なる結果になる可能性があります。

標準では指定されていませんが、オブジェクトのデフォルトのハッシュコードは通常、内部アドレスを返すだけであり、これは jvm が実行されているマシンによって明らかに異なります.....シリアル化/逆シリアル化された後に同じものを返すことを制御しません

于 2013-10-28T04:33:50.443 に答える
0

シリアル化中、いくつかのフィールドはシリアル化されない場合があります (例: 一時フィールド)。この場合、シリアル化されたオブジェクトのハッシュコードは元のものとは異なります。

于 2013-10-28T02:49:39.017 に答える
0

Object クラスの hashCode メソッドに依存している場合、すべての状況でデシリアライズされたオブジェクトと元のオブジェクトの間で hashCode の違いが得られます。ユーザー オブジェクトをファイルにシリアライズすることでテストできます。

于 2014-02-16T12:44:19.960 に答える