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() // OK2. 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 code3. 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() ?: 05. 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
ischeck - String ↔ Number:
toString(),toInt() - Type casting:
as(unsafe),as?(safe) - Always validate user input với
toXxxOrNull()
Last updated on