Hỏi về cách lưu địa chỉ đối tượng trong java

Mình đang học java , bên c thì mình thấy quản lí vùng nhớ bằng địa chỉ, còn với java khi khai báo đối tượng thì nó sẽ băm ra 1 cái mã ,cái mã này là duy nhất cho 1, hoặc đối tượng có cùng tất cả thuộc tính, còn đối tượng khác thuộc tính và đối tượng thuộc lớp khác sẽ băm ra mã khác nhưng lúc này mình lại gặp câu này trên oracle, thấy khó hiểu :

  1. If object1 and object2 are equal according to their equals() method, they must also have the same hash code.
  2. If object1 and object2 have the same hash code, they do NOT have to be equal too.

theo mình nghĩ 2 cái hashcode giống nhau thì đối tượng phải giống nhau chứ nhỉ, co cái cơ chế giải quyết đụng độ nó đã giải quyết vấn đề trùng mã rồi mà

2 object trùng mã băm không nhất thiết phải equal nhau, đơn giản là vì nhiều khi cái hàm băm bạn định nghĩa vô tình cho ra kết quả băm giống nhau giữa 2 Object thì sao?

Lấy ví dụ thế này đi, mình có hàm băm f(x)=x%10+1. Với cái hàm băm kiểu này thì cho dù x là 17 hoặc 57 thì đều cho ra mã băm là 8 cả, vậy chúng có bằng nhau không?

3 Likes

Số mã hash luôn bé hơn số đối tượng có thể hash :slight_smile:

3 Likes

Chưa chắc được, vẫn có những Object có cùng hash value vì nó cùng nằm trong 1 bucket nhưng bản chất nó khác nhau.

Cái này bạn cũng hiểu sai rồi nhé. Có cùng thuộc tính như chưa chắc hash value đã bằng nhau.

1 Like

Các đối tượng có cùng hashcode được lưu trong cùng một bucket.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?