欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java對象的地址和hashcode

趙雅婷1年前8瀏覽0評論

在Java中,每個對象都有一個地址,它是該對象在內存中的唯一位置。可以使用

Object.toString()
方法來獲取一個對象的地址:

Object obj = new Object();
System.out.println(obj.toString()); // 輸出類名和地址,如 "java.lang.Object@3a4afd5c"

該字符串由類名、@符號和十六進制的無符號整數組成,后者就是對象的地址。它通常用于日志和調試。

然而,有時候更方便的是獲取一個對象的哈希碼(HashCode),它是一個int類型的數字,表示對象的散列值。Java中每個對象都有一個哈希碼,可以通過

Object.hashCode()
方法來獲取:

Object obj = new Object();
System.out.println(obj.hashCode()); // 輸出該對象的哈希碼,如 "1011743182"

哈希碼的作用在于在散列表(Hashtable)等需要快速查找對象的數據結構中,可以根據它來定位對象的位置。Java的標準庫中很多類都利用了哈希碼,如

HashMap
HashSet
Hashtable
等。

在實現自定義類時,為了保證比較對象的正確性,通常需要重寫

Object.equals()
方法和
Object.hashCode()
方法,以確保相等的對象哈希碼相等。例如:

public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Person)) {
return false;
}
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
// getters and setters...
}

上述代碼中,重寫了

equals()
方法和
hashCode()
方法,以確保同時滿足以下條件:

  • 兩個 Person 對象ab,比較相等即返回 true,當且僅當 a.name 和 b.name 相同,且 a.age 和 b.age 相等。
  • 如果兩個 Person 對象相等,它們的哈希碼必須相等。

當使用自定義類作為 HashMap 的鍵或 HashSet 的元素時,就可以通過重寫這兩個方法來保證正確性,避免出現意外的錯誤。