伊谢尔伦2017-04-18 10:18:13
Object的hashCode()預設是回傳記憶體位址的,但是hashCode()可以重寫,所以hashCode()不能代表記憶體位址的不同
System.identityHashCode(Object)方法可以傳回物件的記憶體位址,不管該物件的類別是否重寫了hashCode()方法
天蓬老师2017-04-18 10:18:13
java Object類別裡toString方法預設就是列印引用變數的位址,如果不是列印位址就是toString在子類別被重寫了,你可以嘗試重寫toString
PHPz2017-04-18 10:18:13
把JDK的API好好唸一下
hashCode 的常規協定是:
在 Java 應用程式執行期間,在對相同物件多次呼叫 hashCode 方法時,必須一致地傳回相同的整數,前提是將物件進行 equals 比較時所使用的資訊沒有被修改。從某一應用程式的一次執行到同一應用程式的另一次執行,該整數無需保持一致。
如果根據 equals(Object) 方法,兩個物件是相等的,那麼對這兩個物件中的每個物件呼叫 hashCode 方法都必須產生相同的整數結果。
如果根據 equals(java.lang.Object) 方法,兩個物件不相等,那麼對這兩個物件中的任一物件上呼叫 hashCode 方法不 要求一定產生不同的整數結果。但是,程式設計師應該意識到,為不相等的物件產生不同整數結果可以提高雜湊表的效能。
實際上,由 Object 類別定義的 hashCode 方法確實會針對不同的物件傳回不同的整數。 (這一般是透過將該物件的內部位址轉換成一個整數來實現的,但是 JavaTM 程式語言不需要這種實作技巧。)