java怎么打印每个对象的内存地址呢?hashcode能代表内存地址的不同吗?
黄舟
黄舟 2017-04-18 10:16:13
0
4
564

java怎么打印每个对象的内存地址呢?hashcode能代表内存地址的不同吗?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(4)
黄舟
  1. それは許可されていないと覚えています。メモリアドレスを出力する理由は何ですか?

  2. ハッシュコードは必ずしもメモリアドレスが異なることを意味するわけではありません。 JVM が異なれば実装も異なります。

いいねを押す +0
伊谢尔伦

オブジェクトの hashCode() はデフォルトでメモリアドレスを返しますが、hashCode() は書き換えられるため、hashCode() は異なるメモリアドレスを表すことはできません

System.identityHashCode(Object) メソッドは、オブジェクトのクラスが hashCode() メソッドをオーバーライドするかどうかに関係なく、オブジェクトのメモリ アドレスを返すことができます

いいねを押す +0
Peter_Zhu

Java オブジェクト クラスの toString メソッドは、デフォルトで参照変数のアドレスを出力します。アドレスが出力されない場合は、toString を書き換えてみてください。

いいねを押す +0
PHPzhong

JDK API をよく読んでください。
hashCode の一般的なプロトコルは次のとおりです。

  • Java アプリケーションの実行中、hashCode メソッドは、オブジェクトと等しくするために使用される情報が変更されていない限り、同じオブジェクトに対して複数回呼び出された場合に、一貫して同じ整数を返さなければなりません。この整数は、アプリケーションの 1 つの実行から同じアプリケーションの別の実行まで一貫している必要はありません。

  • equals(Object) メソッドに従って 2 つのオブジェクトが等しい場合、2 つのオブジェクトのそれぞれに対して hashCode メソッドを呼び出すと、同じ整数の結果が生成されなければなりません。

  • equals(java.lang.Object) メソッドに従って 2 つのオブジェクトが等しくない場合、どちらかのオブジェクトで hashCode メソッドを呼び出しても、異なる整数の結果が生成されるとは限りません。ただし、プログラマは、等しくないオブジェクトに対して異なる整数の結果を生成すると、ハッシュ テーブルのパフォーマンスが向上する可能性があることに注意する必要があります。

    実際、Object クラスによって定義された hashCode メソッドは、オブジェクトごとに異なる整数を返します。 (これは通常、オブジェクトの内部アドレスを整数に変換することによって実現されますが、JavaTM プログラミング言語ではこの実装手法は必要ありません。)

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!