Tôi biết khi nào chúng ta đang truyền các đối tượng, chúng ta đang truyền tham chiếu của nó như một giá trị. Nhưng giá trị này bạn nhận được là sử dụng phương pháp hashcode()
đúng (theo các bài kiểm tra của tôi nó giống nhau)? Vì hashcode()
không phải là địa chỉ bộ nhớ và không được đảm bảo để nhận các giá trị duy nhất mọi lúc, có thể có những điều kỳ lạ xảy ra như va chạm khi truyền vật thể không?điều gì thực sự xảy ra khi truyền các đối tượng trong java?
(Giả sử hashcode()
đã không được ghi đè, tức là, nó sẽ trả về giá trị tương tự như System.identityHashCode()
)
Ba rất nhiều giống như câu hỏi này, nhưng tôi không thể tìm thấy một nguồn tài nguyên có liên quan mà discuses rằng giá trị con người là những gì được thông qua và làm thế nào để bạn có được nó?
EDIT: Đây là thử nghiệm của tôi. Giá trị mặc định toSting()
sử dụng hashCode()
bên trong và chuyển đổi nó thành giá trị hex. Vì vậy, khi chúng tôi đang đi qua các đối tượng, là giá trị này được thông qua? Hoặc những gì hiện java làm để theo dõi tất cả các đối tượng (được thông qua) vì vậy sẽ không có bất kỳ va chạm tham chiếu ?
Object o = new Object();
System.out.println(o);
System.out.println(o.toString()); //both prints same thing - [email protected]
Như bạn nói nếu việc thực hiện mặc định trả về địa chỉ bộ nhớ thì không có vấn đề gì. Nhưng những gì tôi đã thấy là nó là (chức năng mặc định) không được bảo đảm để trả lại địa chỉ bộ nhớ. Nhưng một lần nữa những gì sau đó sẽ xảy ra khi có nhiều đối tượng hơn 2^32 và hashcode() trả về một số nguyên là 32 bit ?? – KillBill
@ user601L 'hashcode()' không phải là một phương pháp dễ dàng. Đôi khi có va chạm. Nhưng nó sẽ luôn luôn tìm thấy một số giá trị để trả lại cho bạn, bất kể nó có sử dụng địa chỉ bộ nhớ của nó để có được nó hay không. Bạn thực sự không nên lo lắng về nó nhiều, chỉ biết rằng va chạm là có thể trong các trường hợp cạnh. –
@bohemian Cảm ơn bạn đã sửa ngữ pháp của mình. Tôi là một thằng ngốc. –