Sự Khác Nhau Giữa == Và Equals Trong Java - Deft Blog
Có thể bạn quan tâm
Mục lục
- 1 Toán tử == là gì
- 2 Equals() method là gì?
- 3 Sự khác nhau giữa toán tử == và equals()
Trong Java, toán tử == và equals() method đều được sử dụng để so sánh bằng, tuy nhiên giữa chúng lại có những điểm khác biệt rất lớn mà trong bài viết này chúng ta sẽ cùng nhau tìm hiểu.
Toán tử == là gì
Toán tử == được dùng để so sánh 2 tham chiếu hay còn được gọi là địa chỉ vùng nhớ dùng để lưu object bên trong heap. Toán tử == trả về true nếu 2 object được so sánh có cùng địa chỉ vùng nhớ.
Equals() method là gì?
Trong khi đó, equals() method được sử dụng với mục đích là so sánh trạng thái của 2 object. Có nghĩa là nếu 2 object mà giá trị của các thuộc tính tương ứng bên trong chúng bằng nhau thì 2 object bằng nhau.
Tuy nhiên chúng ta cần lưu ý rằng java.lang.Object class là superclass của tất cả các class khác trong Java, bên trong Object class mặc định đã cung cấp trình triển khai mặc định cho equals() method, và triển khai mặc định này hoạt động tương tự như toán tử ==.
public boolean equals(Object obj) { return (this == obj); }Do vậy để đạt được việc so sánh trạng thái của 2 object thay vì địa chỉ vùng nhớ thì chúng ta cần override lại equals() method. Tuy nhiên các bạn cứ yên tâm vì hầu hết các IDE như IntellIJ, Eclipse đều hỗ trợ sinh code cho hàm equals() các tự động, chúng ta không cần phải tự viết tay những method này. Ngoài ra lombok cũng hỗ trợ equalsandhashcode annotation để sinh code cho equals() và hashCode() cách tự động.
Ví dụ, java.lang.String override equals và hashcode bên trong nó sẽ kiểm tra giá trị của 2 chuỗi xem có bằng nhau hay không.
Sự khác nhau giữa toán tử == và equals()
Sau khi làm rõ 2 khái niệm về toán tử == và equals() method thì chúng ta có thể tổng quát một số điểm khác biệt giữa chúng ta như sau:
- Đầu tiên, equals() là một method được định nghĩa bên trong Object class, còn toán tử == là một loại toán tử có thể dùng để so sánh bằng các kiểu dữ liệu nguyên thủy hoặc so sánh bằng địa chỉ vùng nhớ của 2 object.
- Chúng ta có thể override method equals() theo cách mà chúng ta định nghĩa 2 object thế nào là bằng nhau. Ví dụ 2 object employee có rất nhiều thuộc tính nhưng chúng ta chỉ cần id và name bằng nhau thì chúng bằng nhau. Còn toán tử == thì chúng ta không thể làm điều tương tự.
- Equals được sử dụng với mục đích chính là so sánh trạng thái của 2 object trong khi toán tử == dù để so sánh địa chỉ vùng nhớ.
Trong ví dụ trên chúng ta khởi tạo 2 String object với cùng giá trị HELLO. Tuy nhiên:
- Sử dụng toán tử ==, nó sẽ đi so sánh địa chỉ vì vậy nó sẽ trả về false vì 2 string object được lưu ở 2 vùng nhớ riêng.
- Sử dụng equals() trả về true vì nó được String class override lại để so sánh giá trị chuỗi tương ứng.
Nguồn
https://www.java67.com/2012/11/difference-between-operator-and-equals-method-in.html
https://www.geeksforgeeks.org/difference-equals-method-java/
Từ khóa » Cách Dùng Equals
-
Cách Dùng động Từ "equal" Tiếng Anh - IELTSDANANG.VN
-
Phương Thức Equals Trong Java String - Học Java Miễn Phí Hay Nhất
-
Phương Thức Equals() Trong Java String - Freetuts
-
Sử Dụng Equals Như Thế Nào Cho đúng - SusuDev
-
Phương Thức Equals() Và Phương Thức HashCode() Trong Java
-
Sử Dụng Equal Và Hashcode Trong Lập Trình Java - Le Vu Nguyen
-
Equal đi Với Giới Từ Gì? Equal To, In, Of Hay With?
-
Phân Biệt Phương Thức Equals Và Toán Tử == Trong Java - Viblo
-
Sự Khác Biệt Giữa Phương Thức .equals () Và Toán Tử == Trong Java
-
Phương Thức Equals() Và Hash Code() Trong Java4 - StuDocu
-
Câu Ví Dụ,định Nghĩa Và Cách Sử Dụng Của"Equal" | HiNative
-
Phân Biệt Phương Thức Equals() Và Toán Tử == - Học Java - CodeGym
-
Phân Biệt Phép So Sánh == Và Equals() - CodeGym Chia Sẻ
-
Bài 28: Equals & Hashcode Trong Java - YouTube