Trong Java, cả == và equals() đều dùng để so sánh, nhưng có khác biệt căn bản:
| STT | Tiêu chí | == |
equals() |
|---|---|---|---|
| 1 | Loại | Toán tử (operator) | Phương thức của class Object |
| 2 | So sánh | So sánh tham chiếu (reference) - xem 2 biến có trỏ đến cùng 1 object không | So sánh nội dung (content) - xem 2 object có giá trị bằng nhau không |
| 3 | Ghi đè | Không thể override | Có thể override (ví dụ String, Integer đã override) |
Ví dụ minh họa
public class JavaTester {
public static void main(String args[]) {
String s1 = new String("TUTORIALSPOINT");
String s2 = new String("TUTORIALSPOINT");
// So sánh tham chiếu
System.out.println(s1 == s2); // false (2 object khác nhau)
// So sánh nội dung
System.out.println(s1.equals(s2)); // true (nội dung giống nhau)
// Kiểu nguyên thủy
System.out.println(10 == 10); // true
System.out.println('a' == 'a'); // true
}
}
Kết quả
false true true true
Lưu ý quan trọng
- Với primitive types (int, char, boolean...):
==so sánh giá trị - Với objects:
==so sánh địa chỉ bộ nhớ,equals()so sánh nội dung - Luôn dùng
equals()để so sánh String, Integer, Date... trừ khi muốn kiểm tra cùng instance