跳转到内容

Kotlin变量

来自代码酷

模板:Note

Kotlin变量[编辑 | 编辑源代码]

在Kotlin中,变量是存储数据的基本单元,通过声明变量可以赋予程序动态处理数据的能力。与Java等语言不同,Kotlin的变量设计强调不可变性优先原则,通过`val`和`var`关键字提供显式的可变性控制。

变量声明基础[编辑 | 编辑源代码]

Kotlin使用以下两种关键字声明变量:

1. 只读变量(val)[编辑 | 编辑源代码]

  • 使用`val`(value的缩写)声明不可重新赋值的变量(类似Java的`final`变量):
fun main() {
    val pi = 3.14159
    println("圆周率: $pi")
    // pi = 3.14  // 编译错误:Val cannot be reassigned
}

模板:Output

2. 可变变量(var)[编辑 | 编辑源代码]

  • 使用`var`(variable的缩写)声明可修改的变量:
fun main() {
    var counter = 0
    println("初始值: $counter")
    counter += 1
    println("修改后: $counter")
}

模板:Output

类型系统[编辑 | 编辑源代码]

Kotlin是静态类型语言,但支持类型推断:

显式类型声明[编辑 | 编辑源代码]

val message: String = "Hello"
var count: Int = 10

类型推断[编辑 | 编辑源代码]

编译器可自动推断类型(推荐方式):

val name = "Kotlin"  // 推断为String
var score = 95.5     // 推断为Double

变量作用域[编辑 | 编辑源代码]

Kotlin变量的作用域遵循词法作用域规则:

flowchart TD A[全局变量] -->|文件顶层声明| B(整个文件可见) C[局部变量] -->|函数/代码块内声明| D(仅块内可见)

示例:

val global = "全局"  // 顶层变量

fun printData() {
    val local = "局部"
    println("$global - $local")  // 正常访问
    // println(anotherLocal)    // 编译错误
    if (true) {
        val anotherLocal = "块内"
        println(anotherLocal)    // 正常访问
    }
}

高级特性[编辑 | 编辑源代码]

延迟初始化[编辑 | 编辑源代码]

使用`lateinit`避免非空类型的立即初始化(仅适用于`var`):

lateinit var config: String

fun setup() {
    config = "加载配置"
    println(config.length)  // 正常访问
}

页面模块:Message box/ambox.css没有内容。

惰性初始化[编辑 | 编辑源代码]

使用`by lazy`实现按需初始化(仅适用于`val`):

val heavyData: String by lazy {
    println("执行初始化计算")
    "大数据计算结果"
}

fun main() {
    println(heavyData)  // 首次访问时初始化
    println(heavyData)  // 直接返回缓存值
}

模板:Output

实际应用案例[编辑 | 编辑源代码]

场景1:用户会话管理[编辑 | 编辑源代码]

class UserSession {
    var authToken: String? = null  // 可空可变变量
    val userId: String by lazy { generateUserId() }

    private fun generateUserId(): String {
        return "user-${System.currentTimeMillis()}"
    }
}

场景2:配置参数处理[编辑 | 编辑源代码]

object AppConfig {
    const val API_VERSION = "v1.0"  // 编译时常量
    var debugMode = false           // 运行时可变参数

    fun toggleDebug() {
        debugMode = !debugMode
        println("Debug模式: ${if (debugMode) "开启" else "关闭"}")
    }
}

最佳实践[编辑 | 编辑源代码]

  • 优先使用`val`声明变量,仅在需要修改时使用`var`
  • 对基本数据类型使用`const val`声明编译时常量
  • 复杂对象的延迟初始化优先选择`by lazy`而非`lateinit`
  • 避免使用全局可变变量(`var`),推荐通过类封装

常见问题[编辑 | 编辑源代码]

模板:Q&A 模板:Q&A

数学表示[编辑 | 编辑源代码]

变量可视为从内存地址到值的映射: variable:AddressValue 其中Kotlin通过类型系统保证: vVariables,type(v)TypeSystem