首頁  >  問答  >  主體

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

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

黄舟黄舟2764 天前604

全部回覆(4)我來回復

  • 黄舟

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

    1. 我記得是不可以的。是什麼原因要讓你去列印記憶體位址?

    2. hashcode不一定能代表記憶體位址不相同。不同的JVM有不同的實作。

    回覆
    0
  • 伊谢尔伦

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

    Object的hashCode()預設是回傳記憶體位址的,但是hashCode()可以重寫,所以hashCode()不能代表記憶體位址的不同

    System.identityHashCode(Object)方法可以傳回物件的記憶體位址,不管該物件的類別是否重寫了hashCode()方法

    回覆
    0
  • 天蓬老师

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

    java Object類別裡toString方法預設就是列印引用變數的位址,如果不是列印位址就是toString在子類別被重寫了,你可以嘗試重寫toString

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:18:13

    把JDK的API好好唸一下
    hashCode 的常規協定是:

    • 在 Java 應用程式執行期間​​,在對相同物件多次呼叫 hashCode 方法時,必須一致地傳回相同的整數,前提是將物件進行 equals 比較時所使用的資訊沒有被修改。從某一應用程式的一次執行到同一應用程式的另一次執行,該整數無需保持一致。

    • 如果根據 equals(Object) 方法,兩個物件是相等的,那麼對這兩個物件中的每個物件呼叫 hashCode 方法都必須產生相同的整數結果。

    • 如果根據 equals(java.lang.Object) 方法,兩個物件不相等,那麼對這兩個物件中的任一物件上呼叫 hashCode 方法不 要求一定產生不同的整數結果。但是,程式設計師應該意識到,為不相等的物件產生不同整數結果可以提高雜湊表的效能。
      實際上,由 Object 類別定義的 hashCode 方法確實會針對不同的物件傳回不同的整數。 (這一般是透過將該物件的內部位址轉換成一個整數來實現的,但是 JavaTM 程式語言不需要這種實作技巧。)

    回覆
    0
  • 取消回覆