Skip to Content
Kotlin📘 Ngôn ngữ KotlinChuyển đổi kiểu dữ liệu (Type Conversion)

Chuyển đổi kiểu dữ liệu (Type Conversion) trong Kotlin

1. Giới thiệu

Kotlin không tự động chuyển đổi kiểu số. Phải sử dụng hàm chuyển đổi tường minh:

val int: Int = 10 val long: Long = 20L // val sum = int + long // ERROR: Type mismatch! // Phải chuyển đổi tường minh val sum1 = int.toLong() + long // OK val sum2 = int + long.toInt() // OK

2. Chuyển đổi giữa các kiểu số

val num = 100 val byte = num.toByte() val short = num.toShort() val int = num.toInt() val long = num.toLong() val float = num.toFloat() val double = num.toDouble() val char = num.toChar() // ASCII code

3. Number to String

val number = 42 val str1 = number.toString() val str2 = "$number" // String template val str3 = number.toString(2) // Binary: "101010" val str4 = number.toString(16) // Hex: "2a"

4. String to Number

val str = "123" // Unsafe conversion (throws exception if invalid) val int = str.toInt() val double = str.toDouble() val long = str.toLong() // Safe conversion (returns null if invalid) val safeInt = str.toIntOrNull() val safeDouble = str.toDoubleOrNull() if (safeInt != null) { println("Valid number: $safeInt") } else { println("Invalid number") } // With default value val value = str.toIntOrNull() ?: 0

5. Char conversions

val char = 'A' val code = char.code // 65 (ASCII) val digit = '5'.digitToInt() // 5 val charFromCode = 65.toChar() // 'A'

6. Boolean conversions

val bool = true val str = bool.toString() // "true" // String to Boolean val b1 = "true".toBoolean() // true val b2 = "false".toBoolean() // false val b3 = "yes".toBoolean() // false (chỉ nhận "true")

7. Type casting với as

val obj: Any = "Hello" // Unsafe cast val str: String = obj as String // OK // Safe cast (returns null if fails) val num: Int? = obj as? Int // null (không throw exception)

8. Smart Casts

fun printLength(obj: Any) { if (obj is String) { // obj tự động được cast thành String println(obj.length) // OK, không cần cast } } // With when fun describe(obj: Any): String = when (obj) { is String -> "String of length ${obj.length}" is Int -> "Integer: $obj" is Double -> "Double: $obj" else -> "Unknown" }

9. Ví dụ thực tế: Parse user input

fun getUserAge(): Int { while (true) { print("Enter your age: ") val input = readln() val age = input.toIntOrNull() if (age != null && age in 0..150) { return age } else { println("Invalid age. Please try again.") } } } fun parseDouble(str: String, default: Double = 0.0): Double { return str.toDoubleOrNull() ?: default }

10. Collections conversion

val list = listOf(1, 2, 3, 4, 5) val array = list.toTypedArray() val set = list.toSet() val mutableList = list.toMutableList() // Convert types val doubles = list.map { it.toDouble() } // [1.0, 2.0, 3.0, 4.0, 5.0] val strings = list.map { it.toString() } // ["1", "2", "3", "4", "5"]

📝 Tóm tắt

  • Kotlin không tự động chuyển kiểu số
  • Unsafe: toInt(), toDouble(), as String
  • Safe: toIntOrNull(), as? String
  • Smart cast: Tự động sau is check
  • String ↔ Number: toString(), toInt()
  • Type casting: as (unsafe), as? (safe)
  • Always validate user input với toXxxOrNull()
Last updated on