Nếu một người không ghi đè phương pháp hashCode
, triển khai mặc định là gì hashCode
?Triển khai mặc định của `hashCode` là gì?
Trả lời
Sau đó, lớp này kế thừa hashCode
từ một trong các tổ tiên của nó. Nếu không ghi đè, thì Object.hashCode sẽ được sử dụng.
Từ docs:
Càng nhiều càng tốt là hợp lý thực tế, phương thức hashCode định nghĩa 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. (Điều này 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 là không cần thiết bởi các ngôn ngữ lập trình JavaTM.)
thực hiện Vì vậy, mặc định là JVM cụ thể
Cảm ơn bạn, vâng. Việc thực hiện 'Object.hashCode() trông như thế nào? –
@JohnThreepwood nó là một chi tiết thực hiện, bạn cần phải giải quyết tài liệu JVM của bạn cho điều đó. –
http://stackoverflow.com/a/32454673/6785908 –
Object. hashcode() là một phương thức gốc.
public native int hashCode();
Điều đó có nghĩa nó thực hiện trong mã cụ nền tảng và được tiếp xúc như một phương pháp tự nhiên.
mã cho cùng sẽ là một mã biên dịch và không có sẵn withing JDK
existing question này có thể cung cấp thêm thông tin.
Theo mặc định, các phương pháp không được ghi đè lên được kế thừa từ Object
.
Nếu bạn xem tài liệu của phương pháp đó, giá trị trả lại là "[...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...])
". Phương thức trong java.lang.Object
được khai báo là có nguồn gốc, có nghĩa là việc triển khai được cung cấp bởi JVM và có thể khác nhau tùy thuộc vào môi trường thời gian chạy của bạn.
Một ví dụ nhỏ:
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1.hashCode());
System.out.println(o2.hashCode());
in (sử dụng jdk6 của tôi):
1660187542
516992923
Một Hex đại diện của các giá trị hashCode()
được sử dụng trong việc thực hiện mặc định của toString()
bằng cách này: Chạy System.out.println(o1)
in một cái gì đó như
[email protected]
Giải thích tốt. – chipmunk
- 1. cách ưa thích để triển khai hashCode() là gì?
- 2. Chiến lược triển khai hashCode
- 3. Triển khai gốc trong Java là gì?
- 4. Định nghĩa chi tiết triển khai là gì?
- 5. Cách triển khai phương thức hashCode và equals
- 6. Triển khai Web - Cấu hình triển khai root làm mặc định
- 7. Lớp triển khai IGrouping là gì?
- 8. Tại sao Object.toString() mặc định bao gồm hashcode?
- 9. Mặc định cho mọi người trong gói triển khai
- 10. Python: xử lý mặc định của SIGTERM là gì?
- 11. Mã hóa mặc định của JVM là gì?
- 12. Hành vi DELETE mặc định của MySQL là gì?
- 13. Loại ScaleType mặc định của ImageView là gì?
- 14. Dòng âm thanh mặc định của TTS là gì?
- 15. Mặc định __hash__ trong python là gì?
- 16. Giá trị mặc định GOMAXPROCS là gì
- 17. Phương thức hashCode() của java có phải là định nghĩa không?
- 18. Tại sao việc triển khai Externalizable lại cần một hàm tạo công khai mặc định?
- 19. trình định dạng nhật ký python mặc định là gì
- 20. Giá trị mặc định cho FACELETS_REFRESH_PERIOD là gì?
- 21. Triển khai tốt nhất cho AOP trong .Net là gì?
- 22. Cách được khuyến nghị để triển khai Yesod là gì?
- 23. Ưu và nhược điểm của việc triển khai Python khác nhau là gì?
- 24. Máy chủ Web mặc định cho Chicago Boss là gì?
- 25. Triển khai ISupportErrorInfo - điều đó có nghĩa là gì?
- 26. "Chương trình giao diện, không triển khai" nghĩa là gì?
- 27. Triển khai VoiceXML nguồn mở tốt là gì?
- 28. Cách thông minh để triển khai OrderBy/ThenBy là gì?
- 29. Ý nghĩa của các biến tĩnh trong việc triển khai giao diện là gì?
- 30. Các phương pháp hay nhất của Team City để triển khai nhiều tầng là gì?
Giới thiệu về impl mặc định ementation bạn có thể đọc [this] (http://blogs.tedneward.com/CommentView,guid,eca26c5e-307c-4b7c-931b-2eaf5b176e98.aspx) – CAMOBAP
thực hiện mặc định là JVM cụ thể, nhưng nói chung nó trả về 'các đối tượng trả về. băm (this.field1, this.field2, this.field3, v.v.); ' – NoName