Hash code là gì

-
HashCode cùng với Equals trong Java

trước hết ta sáng tỏ giữa equals() và ‘==’.

Bạn đang xem: Hash code là gì

Toán thù tử ‘==’ được dùng làm đối chiếu shop 2 đối tượng người dùng cùng giá trị của những biến nguyên ổn tbỏ. Còn equals() được dùng làm quan niệm ráng nào là 2 đối tượng người dùng trùng nhau, equals() chỉ vận dụng mang lại kiểu đối tượng người sử dụng, ko vận dụng cho mẫu mã ngulặng tbỏ.

Ví dụ cùng với đối chiếu ‘==’:

class Nguoi String ten; String diaChi; public Nguoi() super(); public Nguoi(String ten, String diaChi) super(); this.ten = ten; this.diaChi = diaChi; Nguoi n1 = new Nguoi("tran van a", "ha noi");Nguoi n2 = new Nguoi("tran van a", "ha noi");Rõ ràng 2 đối tượng n1 cùng n2 gồm những trực thuộc tính hệt nhau nhau, nhưng mà trường hợp so sánh n1==n2 vẫn trả về false khác biệt bởi vì Lúc khởi chế tạo ra bởi toán tử new thì n1 cùng n2 đã làm được trỏ tới hai vùng ghi nhớ không giống nhau.

*

Nếu viết:

Nguoi n1 = new Nguoi("tran van a", "ha noi");Nguoi n2 = n1;Thì rất có thể gọi là n2 vẫn trỏ tới vùng ghi nhớ của n1 như thế n1 với n2 bao gồm cùng hệ trọng, khi đó đối chiếu n1==n2 đã trả về true.

*

Đối cùng với những phát triển thành nguyên ổn tbỏ thì Khi so sánh ‘==’ nó đang so sánh quý giá của chúng, ví dụ int a=10, int b=10 thì a==b đang trả về quý giá true, tốt String str1=”a” , str2=”abc” thì so sánh str1==str2 vẫn trả về false.

Xem thêm: Tặng 1239 Gift Code Mu Origin Mới Nhất, Mu Origin Vn

Vấn đề đặt ra là cùng với đều dạng hình đối tượng khác ví như class Nguoi thì bài toán equals() chúng nhỏng làm sao, 2 đối tượng người sử dụng tín đồ bằng nhau dựa trên ĐK nào?hashCode là gì: hashCode có thể hiểu là giá trị định danh cho một đối tượng người dùng, phần lớn đối tượng người dùng đều nhau sẽ có được hashCode đều bằng nhau còn hashCode cân nhau thì không dĩ nhiên 2 đối tượng người tiêu dùng đó đã bằng nhau.

Ý nghĩa của hàm hashCode

Ví dụ: ta gồm class sau

class Nguoi String ten; String diaChi; public Nguoi() super(); public Nguoi(String ten, String diaChi) super(); this.ten = ten; this.diaChi = diaChi;
Override public boolean equals(Object obj) if (obj.getClass() != this.getClass()) return false; Nguoi n = (Nguoi) obj; return this.ten == n.ten;
Override public int hashCode() return diaChi.hashCode(); hashCode trả về của đối tượng người được tạo thành vẫn là mã băm của liên can, những điều đó chỉ phần đông đối tượng người dùng như thế nào bao gồm cùng liên can thì mới có thể có chức năng bằng nhau(không chắc vẫn bởi nhau), còn giả dụ không giống shop thì chắc hẳn rằng đã khác nhau.

Để quan niệm 2 đối tượng người dùng người bằng nhau ta đề nghị tư tưởng lại hàm equals(), vào ví dụ trên: ta định nghĩa 2 đối tượng người sử dụng cân nhau giả dụ chúng thuộc bao gồm phong cách là tín đồ với nên gồm cùng tên cùng nhau. Lúc đó:

Nguoi n1 = new Nguoi("tran van a", "ha noi");Nguoi n2 = new Nguoi("tran van a", "ha noi");Khi đó đối chiếu n1.equals(n2) đang cân nhau vì n1 với n2 cùng hình dạng Nguoi, thuộc hashCode (vì chưng gồm cùng địa chỉ) cùng có cùng tên.


This entry was posted in Java và tagged thử nghiệm, java, object oriented programing, oop. Bookmark the permaliên kết.

Điều hướng bài viết


← Giải phù hợp những annotation vào Hibernate (code ví dụ)
Code ví dụ Hibernate Session, SessionFactory (MySQL + Maven + Eclipse) →