首页 / Android 入门教程 / 变量与数据类型

Android 入门教程

变量与数据类型

本教程共 100 篇 · 第 10 篇 · 更新于 2026-07-28 · 约 7 分钟阅读

AndroidAndroid 入门教程Kotlin变量数据类型valvar空安全

10. 变量与数据类型

本节目标:学会声明变量(val 与 var 的区别)、认识 Kotlin 的基本类型、理解类型推断和可空类型、会用字符串模板。

val 与 var:两个关键字搞定变量

Kotlin 声明变量只用两个关键字:

  • val:只读变量,赋值后不能再改。相当于 Java 的 final
  • var:可变变量,能反复赋值。
val name: String = "Android"   // 只读
var count: Int = 0             // 可变
count = 1                      // OK
// name = "iOS"                // 编译报错,val 不能改
Tip

默认用 val,只有确实需要改时才用 var。这是 Kotlin 的好习惯,能减少意外修改导致的 bug。Android 里很多状态其实不需要变,用 val 让代码更安全。

注意 val 是「引用只读」,不是「对象不可变」。val 指向一个可变列表,列表内容还是能改:

val list = mutableListOf(1, 2, 3)
list.add(4)          // OK,列表内容变了
// list = mutableListOf()  // 报错,val 不能重新指向

类型推断:不用处处写类型

Kotlin 能根据初始值推断类型,大多时候不用显式写类型:

val name = "Android"          // 推断为 String
var count = 0                 // 推断为 Int
val price = 9.99              // 推断为 Double
val isActive = true           // 推断为 Boolean

需要明确类型时(比如没初始值,或想用更具体的类型)才写:

val age: Int = 18
val Pi: Float = 3.14f         // Float 要加 f
val id: Long = 1234567890L    // Long 要加 L

基本数据类型

Kotlin 没有 Java 那种「基本类型(int)和包装类型(Integer)」的区分,统一用对象类型,但编译时会优化成基本类型(不装箱)。

数字类型

类型位数范围用途
Byte8-128 ~ 127字节数据
Short16-32768 ~ 32767短整数,少用
Int32-2^31 ~ 2^31-1普通整数,最常用
Long64-2^63 ~ 2^63-1大整数
Float32单精度浮点f 后缀
Double64双精度浮点默认浮点类型
val i: Int = 100
val l: Long = 100L
val f: Float = 3.14f
val d: Double = 3.14

数字之间转换要显式调用方法,Kotlin 不隐式转换:

val a: Int = 10
val b: Long = a.toLong()     // 显式转换
// val b: Long = a           // 编译报错

Boolean

val enabled: Boolean = true
val disabled = false

支持 &&||!

Char

单个字符,用单引号:

val letter: Char = 'A'
val digit = '9'

String

字符串,双引号:

val greeting = "Hello"

字符串模板

Kotlin 字符串里能直接插变量和表达式,这是写起来很爽的特性:

val name = "Android"
val version = 16

println("Welcome to $name")                    // Welcome to Android
println("Current version is $version")         // Current version is 16
println("Name length: ${name.length}")         // Name length: 7
println("Version next year: ${version + 1}")   // Version next year: 17
  • $变量名 直接插变量。
  • ${表达式} 插任意表达式。

多行字符串用三个引号 """

val json = """
    {
        "name": "Android",
        "version": 16
    }
""".trimIndent()

println(json)

trimIndent() 会去掉公共缩进,输出整洁。

Note

Android 里写 SQL、JSON、长文案经常用多行字符串,比拼接 + 干净多了。

可空类型

Kotlin 的类型默认不接受 null。想让变量能存 null,类型后面加 ?

var name: String = "Android"
// name = null              // 编译报错

var nickname: String? = "Andy"
nickname = null             // OK

可空类型用的时候要处理 null,本章先知道有这么个东西,第 16 章专门讲空安全怎么用。

val length = nickname?.length    // 安全调用,nickname 为 null 时返回 null
val len = nickname?.length ?: 0  // Elvis 运算符,null 时用 0

类型转换

Kotlin 不允许隐式转换,要显式调 toXxx()

val i = 10
val l: Long = i.toLong()
val d: Double = i.toDouble()
val s: String = i.toString()

val str = "123"
val num: Int? = str.toIntOrNull()   // 解析失败返回 null,不会抛异常
Tip
  • 解析字符串到数字优先用 toIntOrNull()toDoubleOrNull() 这类带 OrNull 的方法,避免 NumberFormatException 崩溃。

数组

Kotlin 有 Array 类,但日常用得少,大多用集合(List、Set)。需要数组时:

val arr = arrayOf(1, 2, 3)        // Array<Int>
val strs = arrayOf("a", "b")
val ints = intArrayOf(1, 2, 3)    // 基本类型数组,不装箱

println(arr[0])                    // 取值
println(arr.size)                  // 长度

Android 里的常见用法

// Compose 里存状态
var counter by remember { mutableStateOf(0) }   // var,会变
val maxCount = 100                              // val,常量

// 资源 ID
val colorRes = R.color.black
val stringRes = R.string.app_name

// Intent 传值取值
val userId: Long = intent.getLongExtra("user_id", 0L)
val name: String? = intent.getStringExtra("name")

注意 Android API 返回的可空类型,取出来要判空或用 Elvis。

小结

val 只读、var 可变,默认用 val。类型大多能推断不用写。基本类型统一为对象类型,转换要显式调用。字符串模板用 $${} 插值。类型默认非空,加 ? 才能存 null。下一节学控制流。