Bỏ qua để đến nội dung

⚖️ Toán tử Quan hệ/So sánh

🎯 Mục tiêu: Nắm vững các toán tử so sánh trong Kotlin - nền tảng cho điều kiện và logic.


Toán tử so sánh dùng để so sánh hai giá trị, kết quả luôn là Boolean (true hoặc false).

Toán tửÝ nghĩaVí dụKết quả
==Bằng5 == 5true
!=Khác5 != 3true
>Lớn hơn5 > 3true
<Nhỏ hơn3 < 5true
>=Lớn hơn hoặc bằng5 >= 5true
<=Nhỏ hơn hoặc bằng3 <= 3true
val a = 10
val b = 5
println(a == b) // false
println(a != b) // true
println(a > b) // true
println(a >= 10) // true

val x = 10
val y = 20
println(x < y) // true
println(x > y) // false
println(x == 10) // true
println(y != 20) // false
val intVal = 10
val longVal = 10L
val doubleVal = 10.0
// So sánh giá trị, tự động convert
println(intVal == longVal.toInt()) // true
println(intVal.toDouble() == doubleVal) // true
// Cẩn thận với floating point!
println(0.1 + 0.2 == 0.3) // false! (do precision)

So sánh nội dung:

val s1 = "Kotlin"
val s2 = "Kotlin"
val s3 = "kotlin"
println(s1 == s2) // true (cùng nội dung)
println(s1 == s3) // false (khác case)
// Không phân biệt hoa/thường
println(s1.equals(s3, ignoreCase = true)) // true

So sánh reference (cùng object trong memory):

val a = "Kotlin"
val b = "Kotlin"
val c = String("Kotlin".toCharArray())
println(a == b) // true (cùng nội dung)
println(a === b) // true (cùng reference - string pool)
println(a === c) // false (khác reference)

compareTo() trả về:

  • Số âm: Nhỏ hơn
  • 0: Bằng
  • Số dương: Lớn hơn
val a = "apple"
val b = "banana"
println(a.compareTo(b)) // -1 (a < b theo alphabet)
println(a < b) // true
println(a > b) // false

val age = 25
// Kiểm tra trong range
println(age in 18..65) // true (18 <= age <= 65)
println(age !in 0..17) // true (không trong 0-17)
// Với collections
val fruits = listOf("apple", "banana", "orange")
println("apple" in fruits) // true
println("mango" in fruits) // false

data class User(val name: String, val age: Int)
val user1 = User("Alice", 25)
val user2 = User("Alice", 25)
val user3 = User("Bob", 30)
println(user1 == user2) // true (cùng giá trị)
println(user1 === user2) // false (khác reference)
println(user1 == user3) // false
class Person(val name: String)
val p1 = Person("Alice")
val p2 = Person("Alice")
println(p1 == p2) // false! (khác reference)
println(p1 === p2) // false

Implement Comparable để dùng với <, >, etc:

data class Product(val name: String, val price: Double) : Comparable<Product> {
override fun compareTo(other: Product): Int {
return this.price.compareTo(other.price)
}
}
fun main() {
val phone = Product("Phone", 15000000.0)
val laptop = Product("Laptop", 25000000.0)
println(phone < laptop) // true
println(phone > laptop) // false
println(phone == laptop) // false
}

Bài tập 1: Kiểm tra điều kiện đăng ký

fun main() {
val age = 17
val hasParentConsent = true
// TODO: In ra có được đăng ký không
// Điều kiện: >= 18 tuổi HOẶC < 18 có sự đồng ý của phụ huynh
}

Lời giải:

fun main() {
val age = 17
val hasParentConsent = true
val canRegister = age >= 18 || (age < 18 && hasParentConsent)
println("Tuổi: $age")
println("Có đồng ý của phụ huynh: $hasParentConsent")
println("Được đăng ký: $canRegister") // true
}

Bài tập 2: So sánh điểm

fun main() {
val scores = listOf(85, 92, 78, 65, 98)
val passingScore = 75
// TODO: Đếm số lượng đạt và không đạt
}

Lời giải:

fun main() {
val scores = listOf(85, 92, 78, 65, 98)
val passingScore = 75
val passed = scores.count { it >= passingScore }
val failed = scores.count { it < passingScore }
println("Đạt: $passed") // 4
println("Không đạt: $failed") // 1
}

Bài tập 3: Xếp loại học lực

fun main() {
val score = 85.5
// TODO: Xếp loại:
// >= 90: Xuất sắc
// >= 80: Giỏi
// >= 70: Khá
// >= 50: Trung bình
// < 50: Yếu
}

Lời giải:

fun main() {
val score = 85.5
val grade = when {
score >= 90 -> "Xuất sắc"
score >= 80 -> "Giỏi"
score >= 70 -> "Khá"
score >= 50 -> "Trung bình"
else -> "Yếu"
}
println("Điểm: $score - Xếp loại: $grade")
// Output: Điểm: 85.5 - Xếp loại: Giỏi
}

// Kiểm tra API level
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Sử dụng feature cho Android 8.0+
}
// So sánh versions
val currentVersion = "2.1.0"
val minVersion = "2.0.0"
if (currentVersion >= minVersion) {
// OK để tiếp tục
}
// Filter list
val users = listOf(
User("Alice", 25),
User("Bob", 17),
User("Charlie", 30)
)
val adults = users.filter { it.age >= 18 }


Sau bài học này, bạn có thể:

  • Sử dụng 6 toán tử so sánh: ==, !=, <, >, <=, >=
  • Phân biệt == (structural equality) và === (referential equality)
  • So sánh String không phân biệt hoa/thường với equals(ignoreCase = true)
  • Sử dụng in để kiểm tra phạm vi
  • Implement Comparable cho custom class
  • Cẩn thận khi so sánh floating-point numbers

Tiếp theo: Cấu trúc rẽ nhánh (if-else)