検索

ホームページ  >  に質問  >  本文

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

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

黄舟黄舟2766日前606

全員に返信(4)返信します

  • 黄舟

    黄舟2017-04-18 10:18:13

    1. それは許可されていないと覚えています。メモリアドレスを出力する理由は何ですか?

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:18:13

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

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

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:18:13

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

    返事
    0
  • PHPz

    PHPz2017-04-18 10:18:13

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

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

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

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

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

      返事
      0
  • キャンセル返事