2011-01-17 30 views

Trả lời

30

Mã băm đối tượng là chỉ tiêu chuẩn số nhận dạng có thể cho phép bạn phân biệt các đối tượng tùy ý khác nhau trong Java. Nó không nhất thiết là duy nhất, nhưng các đối tượng bằng nhau thường có cùng mã băm.

Phương thức mặc định toString() hiển thị lớp đối tượng và mã băm của nó để bạn có thể hy vọng có thể phân biệt các đối tượng khác nhau. Vì nó cũng được sử dụng theo mặc định trong các thông báo lỗi, điều này tạo ra một chút ý nghĩa.

Xem mô tả của hashCode() method để biết thêm thông tin.

+0

Cảm ơn bạn đã trả lời. Xin lỗi vì đã hỏi bạn điều này, IS có bất kỳ thông số kỹ thuật nào giải thích về điều này không? – Madhu

+0

@Madhu: xem chỉnh sửa của tôi – thkala

+0

Đọc nhận xét javadoc trên java.lang.Object giải thích ít nhất một phần của nó. – Erik

5

Từ javadocs:

Càng nhiều càng tốt là hợp lý thực tiễn, các hashCode phương pháp xác định bởi lớp Object không trở lại số nguyên phân biệt cho các đối tượng khác nhau. (Đây là thường được thực hiện bằng cách chuyển đổi địa chỉ nội bộ của đối tượng vào một số nguyên, nhưng kỹ thuật thực hiện điều này không phải là yêu cầu của JavaTM lập trình ngôn ngữ.)

Các hashCode xuất hiện trong chuỗi đại diện của đối tượng để bạn có thể phân biệt đối tượng này với các đối tượng khác của cùng một lớp. Điều này có thể hữu ích cho việc gỡ lỗi.

+0

thực sự System.identityHashCode ngày nay đang sử dụng một số ngẫu nhiên được chỉ định (vì địa chỉ ở xa 'ổn định') – bestsss

9

Thêm thứ gì đó hữu ích.

Một số người mới có thể bị nhầm lẫn là tại sao giá trị hascode trở qua toString() là khác với những gì được trả về thông qua hashCode(). Điều này là do phương thức toString() trả về một biểu diễn hex của cùng một mã băm.

Integer.toHexString(object.getHashcode); sẽ trả về cùng một giá trị được trả về bởi object.toString().

Các vấn đề liên quan