Toán tử so sánh trong Java 🔍
🎯 Mục tiêu: Học cách sử dụng các toán tử so sánh trong Java để so sánh các giá trị và đưa ra quyết định trong chương trình.
Giới thiệu 📝
Toán tử so sánh là các ký hiệu đặc biệt được sử dụng để so sánh hai giá trị và trả về kết quả là true
hoặc false
. Chúng rất quan trọng trong việc ra quyết định và điều khiển luồng chương trình.
1. Các toán tử so sánh cơ bản ⚡
Bằng (==)
int a = 5;
int b = 5;
boolean isEqual = a == b; // true
String str1 = "Hello";
String str2 = "Hello";
boolean isStringEqual = str1 == str2; // true (do String pool)
💡 Lưu ý: Khi so sánh chuỗi, nên sử dụng phương thức
equals()
thay vì toán tử==
.
Không bằng (!=)
int a = 5;
int b = 3;
boolean isNotEqual = a != b; // true
String str1 = "Hello";
String str2 = "World";
boolean isStringNotEqual = str1 != str2; // true
Lớn hơn (>)
int a = 5;
int b = 3;
boolean isGreater = a > b; // true
Nhỏ hơn (<)
int a = 3;
int b = 5;
boolean isLess = a < b; // true
Lớn hơn hoặc bằng (>=)
int a = 5;
int b = 5;
boolean isGreaterOrEqual = a >= b; // true
Nhỏ hơn hoặc bằng (<=)
int a = 5;
int b = 5;
boolean isLessOrEqual = a <= b; // true
2. So sánh đối tượng 🎯
So sánh tham chiếu
Person p1 = new Person("John", 30);
Person p2 = new Person("John", 30);
boolean sameReference = p1 == p2; // false
So sánh nội dung
Person p1 = new Person("John", 30);
Person p2 = new Person("John", 30);
boolean sameContent = p1.equals(p2); // true (nếu đã override equals)
3. So sánh chuỗi 📝
So sánh tham chiếu
String str1 = "Hello";
String str2 = "Hello";
boolean sameReference = str1 == str2; // true (do String pool)
String str3 = new String("Hello");
String str4 = new String("Hello");
boolean differentReference = str3 == str4; // false
So sánh nội dung
String str1 = "Hello";
String str2 = "Hello";
boolean sameContent = str1.equals(str2); // true
String str3 = new String("Hello");
String str4 = new String("Hello");
boolean sameContent2 = str3.equals(str4); // true
So sánh không phân biệt chữ hoa/thường
String str1 = "Hello";
String str2 = "hello";
boolean sameIgnoreCase = str1.equalsIgnoreCase(str2); // true
4. So sánh số thực 🔢
So sánh trực tiếp
double a = 0.1 + 0.2;
double b = 0.3;
boolean directCompare = a == b; // false (do sai số)
So sánh với sai số
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 0.0001;
boolean compareWithEpsilon = Math.abs(a - b) < epsilon; // true
5. Ví dụ thực tế 🚀
Kiểm tra điểm số
public class GradeChecker {
public static void main(String[] args) {
int score = 85;
if (score >= 90) {
System.out.println("Grade: A");
} else if (score >= 80) {
System.out.println("Grade: B");
} else if (score >= 70) {
System.out.println("Grade: C");
} else {
System.out.println("Grade: F");
}
}
}
Kiểm tra tuổi
public class AgeVerifier {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("Đủ tuổi bầu cử");
} else {
System.out.println("Chưa đủ tuổi bầu cử");
}
}
}
So sánh đối tượng
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
// Sử dụng
Person p1 = new Person("John", 30);
Person p2 = new Person("John", 30);
boolean areEqual = p1.equals(p2); // true
6. Best Practices ✅
-
So sánh chuỗi
// Không nên
if (str1 == str2) { ... }
// Nên
if (str1.equals(str2)) { ... } -
So sánh số thực
// Không nên
if (a == b) { ... }
// Nên
if (Math.abs(a - b) < epsilon) { ... } -
So sánh đối tượng
// Không nên
if (obj1 == obj2) { ... }
// Nên
if (obj1.equals(obj2)) { ... } -
Null safety
// Không nên
if (str.equals("Hello")) { ... }
// Nên
if ("Hello".equals(str)) { ... }
7. Lỗi thường gặp ⚠️
-
NullPointerException
String str = null;
if (str.equals("Hello")) { ... } // NullPointerException -
So sánh sai kiểu
int a = 5;
double b = 5.0;
boolean compare = a == b; // Có thể gây nhầm lẫn -
So sánh số thực
double a = 0.1 + 0.2;
double b = 0.3;
boolean compare = a == b; // false
8. Ví dụ thực tế nâng cao 🎯
Kiểm tra điều kiện đăng nhập
public class LoginValidator {
public static void main(String[] args) {
String username = "admin";
String password = "123456";
// Kiểm tra username và password
if (username != null && password != null) {
if (username.equals("admin") && password.equals("123456")) {
System.out.println("Đăng nhập thành công!");
} else {
System.out.println("Sai tên đăng nhập hoặc mật khẩu!");
}
} else {
System.out.println("Vui lòng nhập đầy đủ thông tin!");
}
}
}
Kiểm tra điều kiện mua hàng
public class PurchaseValidator {
public static void main(String[] args) {
double price = 1000000.0;
double discount = 0.1; // 10% giảm giá
double minPurchase = 500000.0;
// Kiểm tra điều kiện áp dụng giảm giá
if (price >= minPurchase) {
double finalPrice = price * (1 - discount);
System.out.printf("Giá sau giảm giá: %.2f%n", finalPrice);
} else {
System.out.println("Chưa đủ điều kiện áp dụng giảm giá!");
}
}
}
Kiểm tra điều kiện học bổng
public class ScholarshipChecker {
public static void main(String[] args) {
double gpa = 3.8;
int activities = 5;
boolean hasRecommendation = true;
// Kiểm tra điều kiện nhận học bổng
if (gpa >= 3.5 && activities >= 3 && hasRecommendation) {
System.out.println("Chúc mừng! Bạn đủ điều kiện nhận học bổng!");
} else {
System.out.println("Bạn chưa đủ điều kiện nhận học bổng.");
}
}
}
💡 Lời khuyên: Hãy thực hành với các ví dụ thực tế để hiểu rõ hơn về cách sử dụng toán tử so sánh trong các tình huống khác nhau.
Tiếp Theo 🎯
Trong các bài học tiếp theo, chúng ta sẽ:
- Tìm hiểu về toán tử logic
- Học cách sử dụng toán tử điều kiện
- Thực hành với các ví dụ thực tế
- Tìm hiểu về toán tử bitwise