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().
==== đượ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()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.==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.
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.
==: 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 đè.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.
==: 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.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.