HashCode với Equals trong Java – STACKJAVA

[ad_1]

HashCode với Equals trong Java

Đầu tiên ta phân biệt giữa equals() và ‘==’.

Toán tử ‘ = = ’ được dùng để so sánh địa chỉ 2 đối tượng người dùng và giá trị của những biến nguyên thủy. Còn equals ( ) được dùng để định nghĩa thế nào là 2 đối tượng người tiêu dùng trùng nhau, equals ( ) chỉ vận dụng cho kiểu đối tượng người dùng, không vận dụng cho kiểu nguyên thủy .
Ví dụ với so sánh ‘ = = ’ :

class Nguoi {

    String ten;

    String diaChi;

    public Nguoi() {

        super();

    }

    public Nguoi(String ten, String diaChi) {

        super();

        this.ten = ten;

        this.diaChi = diaChi;

    }

}

Nguoi n1 = new Nguoi("tran van a", "ha noi");

Nguoi n2 = new Nguoi("tran van a", "ha noi");

Rõ ràng 2 đối tượng người tiêu dùng n1 và n2 có những thuộc tính giống hệt nhau, nhưng nếu so sánh n1 = = n2 sẽ trả về false khác nhau chính bới khi khởi tạo bằng toán tử new thì n1 và n2 đã được trỏ tới 2 vùng nhớ khác nhau .

Bạn đang đọc: HashCode với Equals trong Java – STACKJAVA

Nếu viết :

Nguoi n1 = new Nguoi("tran van a", "ha noi");

Nguoi n2 = n1;

Thì hoàn toàn có thể hiểu là n2 đã trỏ tới vùng nhớ của n1 như vậy n1 và n2 có cùng địa chỉ, khi đó so sánh n1 = = n2 sẽ trả về true .

Xem thêm: Vai trò của gia đình trong xã hội hiện nay

Đối với những biến nguyên thủy thì khi so sánh ‘ = = ’ nó sẽ so sánh giá trị của chúng, ví dụ int a = 10, int b = 10 thì a = = b sẽ trả về giá trị true, hay String str1 = ” a ”, str2 = ” abc ” thì so sánh str1 = = str2 sẽ trả về false .

  • Vấn đề đặt ra là với những kiểu đối tượng khác như class Nguoi thì việc equals() chúng như nào, 2 đối tượng người bằng nhau dựa trên điều kiện nào?
  • hashCode là gì: hashCode có thể hiểu là giá trị định danh cho 1 đối tượng, những đối tượng bằng nhau sẽ có hashCode bằng nhau còn hashCode bằng nhau thì chưa chắc 2 đối tượng đó đã bằng nhau.

Ý nghĩa của hàm hashCode

Ví dụ: ta có class sau

Xem thêm: Công nghệ đèn UVC là gì – Ánh sáng tia cực tím diệt vi khuẩn ? – DaiThuCompany – 0904723825

class Nguoi {

    String ten;

    String diaChi;

    public Nguoi() {

        super();

    }

    public Nguoi(String ten, String diaChi) {

        super();

        this.ten = ten;

        this.diaChi = diaChi;

    }

    @Override

    public boolean equals(Object obj) {

        if (obj.getClass() != this.getClass()) return false;

        Nguoi n = (Nguoi) obj;

        return this.ten == n.ten;

    }

    @Override

    public int hashCode() {

        return diaChi.hashCode();

    }

}

hashCode trả về của đối tượng người dùng người được tạo ra sẽ là mã băm của địa chỉ, như vậy chỉ những đối tượng người dùng nào có cùng địa chỉ thì mới có năng lực bằng nhau ( chưa chắc đã bằng nhau ), còn nếu khác địa chỉ thì chắc như đinh sẽ khác nhau .
Để định nghĩa 2 đối tượng người dùng người bằng nhau ta phải định nghĩa lại hàm equals ( ), trong ví dụ trên : ta định nghĩa 2 đối tượng người dùng bằng nhau nếu chúng cùng có kiểu là người và phải có cùng tên với nhau. Khi đó :

Nguoi n1 = new Nguoi("tran van a", "ha noi");

Nguoi n2 = new Nguoi("tran van a", "ha noi");

Khi đó so sánh n1.equals ( n2 ) sẽ bằng nhau vì n1 và n2 cùng kiểu Nguoi, cùng hashCode ( vì có cùng địa chỉ ) và có cùng tên .

[ad_2]

Related Posts

Game Lego đua xe F1: Lego Speed Champions

[ad_1]  ContentsHashCode với Equals trong JavaĐầu tiên ta phân biệt giữa equals() và ‘==’.Ý nghĩa của hàm hashCodeRelated posts:Giới thiệu game Lego đua xe F1 Lego…

Game đột kích 3: Crossfire 3 Online

[ad_1]  ContentsHashCode với Equals trong JavaĐầu tiên ta phân biệt giữa equals() và ‘==’.Ý nghĩa của hàm hashCodeRelated posts:Giới thiệu game đột kích 3 Đột kích…

Game thỏ Bunny ném bóng rổ: Space Jam

[ad_1]  ContentsHashCode với Equals trong JavaĐầu tiên ta phân biệt giữa equals() và ‘==’.Ý nghĩa của hàm hashCodeRelated posts:Giới thiệu game thỏ Bunny ném bóng rổ…

Trò chơi xạ thủ diệt Zombie

[ad_1]  ContentsHashCode với Equals trong JavaĐầu tiên ta phân biệt giữa equals() và ‘==’.Ý nghĩa của hàm hashCodeRelated posts:Giới thiệu game xạ thủ diệt Zombie Xạ…

Trò chơi xây nhà Lego

[ad_1] ContentsHashCode với Equals trong JavaĐầu tiên ta phân biệt giữa equals() và ‘==’.Ý nghĩa của hàm hashCodeRelated posts:Giới thiệu game xây nhà Lego Xây nhà Lego…

Game bói tình yêu hiện đại: Valentine’s Love Test

[ad_1]  ContentsHashCode với Equals trong JavaĐầu tiên ta phân biệt giữa equals() và ‘==’.Ý nghĩa của hàm hashCodeRelated posts:Giới thiệu game bói tình yêu hiện đại…

Leave a Reply