Trong Java, ==
và equals()
đều được sử dụng để so sánh, nhưng chúng thực hiện những chức năng khác nhau và được sử dụng trong những ngữ cảnh khác nhau. Dưới đây là sự khác biệt chi tiết giữa ==
và equals()
.
1. Sử dụng
==
- So sánh tham chiếu: Toán tử
==
được sử dụng để so sánh hai đối tượng và kiểm tra xem chúng có tham chiếu đến cùng một đối tượng trong bộ nhớ hay không. Điều này có nghĩa là nếu bạn sử dụng ==
để so sánh hai đối tượng, nó sẽ trả về true
chỉ khi hai biến tham chiếu đến cùng một đối tượng.
equals()
- So sánh giá trị: Phương thức
equals()
được sử dụng để so sánh giá trị của hai đối tượng. Mặc định, phương thức này cũng so sánh tham chiếu, nhưng các lớp như String
, Integer
, và nhiều lớp khác đã ghi đè phương thức này để so sánh giá trị của đối tượng thay vì tham chiếu.
2. Cách hoạt động
Ví dụ với ==
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false
Trong ví dụ trên, str1
và str2
đều là hai đối tượng khác nhau trong bộ nhớ, vì vậy ==
trả về false
.
Ví dụ với equals()
System.out.println(str1.equals(str2)); // true
Khi sử dụng equals()
, phương thức này so sánh giá trị của str1
và str2
, nên nó trả về true
.
3. Kết quả của so sánh
==
: Chỉ kiểm tra xem hai tham chiếu có cùng chỉ địa chỉ trong bộ nhớ hay không.
equals()
: Kiểm tra xem hai đối tượng có giá trị giống nhau hay không, tùy thuộc vào cách mà phương thức equals()
được ghi đè.
4. Các lớp khác nhau
Ví dụ với lớp khác
Integer num1 = new Integer(100);
Integer num2 = new Integer(100);
System.out.println(num1 == num2); // false
System.out.println(num1.equals(num2)); // true
Cả num1
và num2
đều có giá trị là 100
, nhưng chúng là các đối tượng khác nhau trong bộ nhớ, vì vậy ==
trả về false
, trong khi equals()
trả về true
vì giá trị của chúng giống nhau.
5. Kết luận
- Sử dụng
==
: Khi bạn muốn kiểm tra xem hai tham chiếu có trỏ đến cùng một đối tượng hay không.
- Sử dụng
equals()
: Khi bạn muốn kiểm tra xem hai đối tượng có giá trị giống nhau hay không.
Việc hiểu rõ sự khác biệt này là rất quan trọng để tránh các lỗi logic trong chương trình và để đảm bảo rằng bạn so sánh các đối tượng một cách chính xác.