Skip to main content

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 ✅

  1. So sánh chuỗi

    // Không nên
    if (str1 == str2) { ... }

    // Nên
    if (str1.equals(str2)) { ... }
  2. So sánh số thực

    // Không nên
    if (a == b) { ... }

    // Nên
    if (Math.abs(a - b) < epsilon) { ... }
  3. So sánh đối tượng

    // Không nên
    if (obj1 == obj2) { ... }

    // Nên
    if (obj1.equals(obj2)) { ... }
  4. Null safety

    // Không nên
    if (str.equals("Hello")) { ... }

    // Nên
    if ("Hello".equals(str)) { ... }

7. Lỗi thường gặp ⚠️

  1. NullPointerException

    String str = null;
    if (str.equals("Hello")) { ... } // NullPointerException
  2. 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
  3. 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