Giới thiệu
Phương thức SByte.GetHashCode() trong C# trả về mã băm (hash code) cho thể hiện sbyte hiện tại. sbyte là số nguyên 8-bit có dấu (phạm vi -128 đến 127).
Cú pháp
public override int GetHashCode ();
Ví dụ 1: Hash code của hai giá trị sbyte khác nhau
using System;
public class Demo {
public static void Main() {
sbyte s1 = 50;
sbyte s2 = 75;
Console.WriteLine("Giá trị của S1 = " + s1);
Console.WriteLine("Giá trị của S2 = " + s2);
Console.WriteLine("S1 và S2 có bằng nhau? = " + s1.Equals(s2));
Console.WriteLine("HashCode cho s1 = " + s1.GetHashCode());
Console.WriteLine("HashCode cho s2 = " + s2.GetHashCode()); // Sửa: dùng s2.GetHashCode()
}
}
Đầu ra ví dụ 1
Giá trị của S1 = 50 Giá trị của S2 = 75 S1 và S2 có bằng nhau? = False HashCode cho s1 = 50 HashCode cho s2 = 75
Ví dụ 2: So sánh sbyte với object (boxing)
using System;
public class Demo {
public static void Main() {
sbyte s1 = 55;
object s2 = (sbyte)55; // Boxing
Console.WriteLine("Giá trị của S1 = " + s1);
Console.WriteLine("Giá trị của S2 = " + s2);
int res = s1.CompareTo(s2);
if (res > 0)
Console.WriteLine("s1 > s2");
else if (res < 0)
Console.WriteLine("s1 < s2");
else
Console.WriteLine("s1 = s2");
Console.WriteLine("HashCode cho s1 = " + s1.GetHashCode());
Console.WriteLine("HashCode cho s2 = " + s2.GetHashCode()); // Gọi qua object
}
}
Đầu ra ví dụ 2
Giá trị của S1 = 55 Giá trị của S2 = 55 s1 = s2 HashCode cho s1 = 55 HashCode cho s2 = 55
Đặc điểm hash code của sbyte
- Với
sbyte, hash code đơn giản là chính giá trị của nó (sau khi mở rộng thành int). - Ví dụ:
(sbyte)50→ hash code 50;(sbyte)-10→ hash code -10 (hoặc 246 tùy triển khai, nhưng thường là giá trị int tương ứng). - Do miền giá trị nhỏ (-128..127), không có collision cho các giá trị khác nhau.
- Hai giá trị
sbytebằng nhau luôn có cùng hash code.
Lưu ý về ví dụ gốc
Trong ví dụ gốc có lỗi in s1.GetHashCode() cho cả s1 và s2. Code đã được sửa trong ví dụ 1 ở trên.
So sánh với các kiểu số nguyên khác
| Kiểu | Phạm vi | Hash code |
|---|---|---|
| sbyte | -128..127 | Giá trị int tương đương |
| byte | 0..255 | Giá trị int tương đương |
| short | -32768..32767 | Giá trị int tương đương |
| int | -2^31..2^31-1 | Chính giá trị int |