Equality trong Kotlin

Trong Java, khi so sánh 2 đối tượng được khởi tạo từ một class có bằng nhau hay không, chúng ta cần implement 2 phương thức equals() và hashCode() cho class đó và sẽ sử dụng phương thức equals() để so sánh chúng.

Ví dụ, mình có class Student chứa thông tin tên, tuổi được định nghĩa với các phương thức equals() và hashCode() như sau:

Để so sánh các đối tượng của class Student, chúng ta cần sử dụng phương thức equals() thay vì toán tử equality, ví dụ như sau:

Kết quả:

Như các bạn thấy, với toán tử equality, việc so sánh 2 đối tượng Student sẽ cho ra kết quả là false.

Thế nhưng, trong Kotlin, nếu các bạn viết đoạn code tương tự như trên:

các bạn sẽ thấy kết quả như sau khi chạy đoạn code này:


Rõ ràng là có sự khác biệt ở đây giữa Java và Kotlin đúng không các bạn? Sử dụng toán tử equality để so sánh 2 đối tượng của class Student cùng tên, cùng tuổi trong Kotlin vẫn trả về kết quả là true. Đó là bởi vì, toán tử equality trong Kotlin là structural equality, chỉ cần 2 đối tượng có cùng nội dung, không quan trọng về địa chỉ của các đối tượng này trong memory, là chúng sẽ giống nhau. Vì lý do này mà nếu các bạn sử dụng phương thức equals() để so sánh 2 đối tượng trong Kotlin, IntelliJ sẽ suggest các bạn sử dụng toán tử equality để code ngắn gọn hơn.

Để so sánh tham chiếu (referential equality) trong Kotlin, các bạn cần viết code để so sánh 2 đối tượng với 3 dấu bằng như sau:

Khi đó, kết quả khi so sánh sẽ giống Java, luôn là false:

Nếu:

kết quả của dòng code cuối sẽ là true:

Chúng ta có so sánh bằng và so sánh không bằng trong Java với “==” và  “!=”. Trong Kotlin thì chúng ta sử dụng “===” và “!==“, ví dụ như sau:

Kết quả:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *