Các đẳng thức tương tự như toán tử ==, là để kiểm tra nhận dạng đối tượng chứ không phải là đẳng thức đối tượng. HashCode là một phương thức trong đó một lớp phân tách ngầm hoặc rõ ràng dữ liệu được lưu trữ trong một thể hiện của lớp thành một giá trị băm duy nhất, là một số nguyên có chữ ký 32 bit. Các sự khác biệt chính giữa bằng và hashCode trong Java có phải vậy không bằng được sử dụng để so sánh hai đối tượng trong khi hashCode được sử dụng trong băm để quyết định nhóm nào một đối tượng nên được phân loại thành.
1. Tổng quan và sự khác biệt chính
2. Thế nào là bằng Java
3. HashCode trong Java là gì
4. So sánh cạnh nhau - bằng với hashCode trong Java ở dạng bảng
5. Tóm tắt
Phương thức equals được sử dụng để so sánh hai đối tượng. Phương thức bằng mặc định được định nghĩa trong lớp đối tượng. Việc thực hiện đó tương tự như toán tử ==. Hai tham chiếu đối tượng chỉ bằng nhau nếu chúng được trỏ đến cùng một đối tượng. Có thể ghi đè phương thức bằng.
Hình 01: Chương trình Java có giá trị bằng
Câu lệnh System.out.println (s1.equals (s2)) sẽ đưa ra câu trả lời sai vì s1 và s2 đang đề cập đến hai đối tượng khác nhau. Nó tương tự như câu lệnh, System.out.println (s1 == s2);
Câu lệnh System.out.println (s1.equals (s3)) sẽ cho câu trả lời đúng vì s1 và s3 đang đề cập đến cùng một đối tượng. Nó tương tự như câu lệnh, System.out.println (s1 == s3);
Không có phương thức bằng trong lớp Sinh viên. Do đó, các đẳng thức trong lớp Object được gọi. True chỉ được hiển thị nếu tham chiếu đối tượng đang trỏ đến cùng một đối tượng.
Hình 02: Chương trình Java với Overridden bằng
Theo chương trình trên, phương thức bằng được ghi đè. Một đối tượng được truyền cho phương thức và nó được truyền cho Student. Sau đó, các giá trị id được kiểm tra. Nếu các giá trị id tương tự nhau, nó sẽ trả về true. Nếu không, nó sẽ trả về false. Id của s1 và s2 tương tự nhau. Vì vậy, nó sẽ in đúng. Id của s1 và s3 cũng tương tự nhau, vì vậy nó sẽ in đúng.
HashCode được sử dụng trong băm để quyết định nhóm nào nên phân loại một đối tượng. Một nhóm các đối tượng có thể chia sẻ cùng mã băm. Một hàm băm chính xác có thể phân phối đồng đều các đối tượng thành các nhóm khác nhau.
Một hashCode đúng có thể có các thuộc tính như sau. Giả sử rằng có hai đối tượng là obj1 và obj2. Nếu obj1.equals (obj2) là đúng, thì obj1.hashCode () bằng với obj2.hashCode (). Nếu obj1.equals (obj2) là false, thì không cần thiết obj1.hashCode () không bằng obj2.hashCode (). Hai đối tượng không bằng nhau cũng có thể có cùng mã băm.
Hình 03: Lớp sinh viên với bằng và hashCode
Hình 04: Chương trình chính
Lớp Student chứa các phương thức bằng và hashCode. Phương thức bằng trong lớp Sinh viên sẽ nhận được một đối tượng. Nếu đối tượng là null, nó sẽ trả về false. Nếu các lớp của các đối tượng không giống nhau, nó sẽ trả về false. Các giá trị id được kiểm tra trong cả hai đối tượng. Nếu chúng giống nhau, nó sẽ trả về đúng. Khác nó sẽ trả lại sai.
Trong chương trình chính, các đối tượng s1 và s2 được tạo. Khi gọi s1.equals (s2) sẽ cho đúng vì phương thức equals bị ghi đè và nó kiểm tra giá trị id của hai đối tượng. Mặc dù họ đang đề cập đến hai đối tượng, câu trả lời là đúng vì các giá trị id của s1 và s2 là như nhau. Vì s1.equals (s2) là đúng, nên mã băm của s1 và s2 phải bằng nhau. In mã băm của s1 và s2 cho cùng một giá trị. Phương thức hashCode có thể được sử dụng với Bộ sưu tập như HashMap.
bằng với hashCode trong Java | |
Equals là một phương thức trong Java hoạt động tương tự toán tử ==, để kiểm tra nhận dạng đối tượng chứ không phải là đẳng thức đối tượng. | hashCode là một phương thức theo đó một lớp ngầm định hoặc phân tách rõ ràng dữ liệu được lưu trữ trong một thể hiện của lớp thành một giá trị băm duy nhất. |
Sử dụng | |
Phương thức bằng được sử dụng để so sánh hai đối tượng. | Phương thức này được sử dụng trong băm để quyết định nên đặt đối tượng nào vào nhóm. |
Sự khác biệt về Equal và hashCode trong Java là các Equal được sử dụng để so sánh hai đối tượng trong khi hashCode được sử dụng trong băm để quyết định nhóm nào nên phân loại một đối tượng.
1. Java Java HashCode (). Wikipedia, Wikimedia Foundation, 17 tháng 2 năm 2018. Có sẵn tại đây
2.Harold, Elliotte Rusty. Phương thức Equals (). Phương thức Equals (), ngày 2 tháng 11 năm 2001. Có sẵn tại đây