Tôi đã tự hỏi nếu ai đó có thể giải thích một cách chi tiết những gìBit-chuyển trong Effective Java hashCode() thực hiện
(int)(l^(l >>> 32));
không trong việc thực hiện sau hashcode (tạo ra bởi nhật thực, nhưng cũng giống như Java hiệu quả) :
private int i;
private char c;
private boolean b;
private short s;
private long l;
private double d;
private float f;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + i;
result = prime * result + s;
result = prime * result + (b ? 1231 : 1237);
result = prime * result + c;
long t = Double.doubleToLongBits(d);
result = prime * result + (int) (t^(t >>> 32));
result = prime * result + Float.floatToIntBits(f);
result = prime * result + (int) (l^(l >>> 32));
return result;
}
Cảm ơn!
Lý do để thực hiện việc này là gì? Bạn sẽ không nhận được một hashcode hợp lệ mà không làm nó? –
@Scobal: Tôi đã mở rộng câu trả lời của mình để giải thích thêm. –
Và có một ý nghĩa của hằng số 31 (int nguyên tố) ở đây hoặc chúng ta có thể lấy số nguyên tố? – Diffy