Toán tử quan hệ (so sánh)
1. Các toán tử quan hệ
Phần tiêu đề “1. Các toán tử quan hệ”| Toán tử | Ý nghĩa | Ví dụ |
|---|---|---|
== |
Bằng | 5 == 5 → true |
!= |
Khác | 5 != 3 → true |
> |
Lớn hơn | 5 > 3 → true |
< |
Nhỏ hơn | 5 < 3 → false |
>= |
Lớn hơn hoặc bằng | 5 >= 5 → true |
<= |
Nhỏ hơn hoặc bằng | 5 <= 3 → false |
Kết quả của các toán tử này luôn là boolean:
int age = 20;boolean isAdult = age >= 18; // trueSystem.out.println(isAdult);2. So sánh trên kiểu nguyên thủy (primitive)
Phần tiêu đề “2. So sánh trên kiểu nguyên thủy (primitive)”Với các kiểu nguyên thủy (int, double, char…), == so sánh giá trị một cách trực tiếp và hoạt động đúng như mong đợi:
int a = 5, b = 5;System.out.println(a == b); // true - so sánh giá trị3. ⚠️ So sánh trên object (bao gồm String)
Phần tiêu đề “3. ⚠️ So sánh trên object (bao gồm String)”Với object (bao gồm String, Integer, hay bất kỳ class nào), == so sánh xem hai biến có cùng trỏ đến một object trong bộ nhớ hay không, chứ không so sánh nội dung:
String s1 = new String("hello");String s2 = new String("hello");System.out.println(s1 == s2); // false! Hai object khác nhau, dù nội dung giống nhauSystem.out.println(s1.equals(s2)); // true - so sánh đúng nội dungChủ đề này có nhiều điểm bất ngờ (String pool, Integer caching…) - xem chi tiết ở bài “What the Java” dành riêng về so sánh chuỗi.
4. Không có so sánh chuỗi như toán học
Phần tiêu đề “4. Không có so sánh chuỗi như toán học”Khác với Python, Java không hỗ trợ so sánh liên tiếp kiểu toán học như a < b < c:
int a = 1, b = 2, c = 3;// if (a < b < c) { ... } // LỖI BIÊN DỊCH!Lý do: a < b cho ra kết quả boolean, và Java không cho phép so sánh boolean < int (boolean không chuyển đổi được sang số). Phải viết tường minh:
if (a < b && b < c) { // Đúng System.out.println("a < b < c");}Tổng kết
Phần tiêu đề “Tổng kết”- Toán tử quan hệ trả về
boolean:==,!=,>,<,>=,<= - Trên kiểu nguyên thủy,
==so sánh giá trị - Trên object (kể cả
String),==so sánh tham chiếu (địa chỉ), không phải nội dung - dùng.equals()để so sánh nội dung - Java không cho phép viết so sánh liên tiếp
a < b < cnhư trong toán học