2. 变量与常量

任务说明

本案例演示 Kotlin 中变量与常量的定义方式,覆盖类型推断、显式类型声明以及可变/不可变语义。你将看到一组可直接运行的 Kotlin 代码,并通过输出结果验证不同声明方式的行为差异。

核心实现

// 文件: VariablesAndConstants.kt

// ---------- 变量 (var: 可变) ----------
var count = 10              // 类型推断: Int
var name = "Kotlin"         // 类型推断: String
var score = 95.5            // 类型推断: Double

// 显式类型声明
var explicitInt: Int = 42
var explicitLong: Long = 100L
var explicitFloat: Float = 3.14f
var explicitDouble: Double = 2.71828
var explicitBoolean: Boolean = true
var explicitChar: Char = 'A'
var explicitString: String = "Hello"

// 变量可重新赋值
count = 20
name = "Android"

// ---------- 常量 (val: 不可变) ----------
val pi = 3.14159            // 类型推断: Double
val appName: String = "MyApp"  // 显式类型
val maxRetries: Int = 3

// 尝试修改 val 会编译错误,下面这行如果取消注释将无法编译
// pi = 3.14  // 错误: val 不能被重新赋值

// ---------- 顶层常量 (编译期常量) ----------
const val COMPILE_TIME_CONST = 100  // 仅支持基本类型和 String

// ---------- 字符串模板演示 ----------
val language = "Kotlin"
val version = 2.0
val description = "课程: $language, 版本: $version"

// ---------- 主函数: 输出验证 ----------
fun main() {
    println("=== 变量 (var) ===")
    println("count = $count (类型: ${count::class.simpleName})")
    println("name = $name (类型: ${name::class.simpleName})")
    println("score = $score (类型: ${score::class.simpleName})")

    println("\n=== 显式类型声明 ===")
    println("explicitInt = $explicitInt (类型: ${explicitInt::class.simpleName})")
    println("explicitLong = $explicitLong (类型: ${explicitLong::class.simpleName})")
    println("explicitFloat = $explicitFloat (类型: ${explicitFloat::class.simpleName})")
    println("explicitDouble = $explicitDouble (类型: ${explicitDouble::class.simpleName})")
    println("explicitBoolean = $explicitBoolean (类型: ${explicitBoolean::class.simpleName})")
    println("explicitChar = $explicitChar (类型: ${explicitChar::class.simpleName})")
    println("explicitString = $explicitString (类型: ${explicitString::class.simpleName})")

    println("\n=== 常量 (val) ===")
    println("pi = $pi (类型: ${pi::class.simpleName})")
    println("appName = $appName (类型: ${appName::class.simpleName})")
    println("maxRetries = $maxRetries (类型: ${maxRetries::class.simpleName})")

    println("\n=== 编译期常量 ===")
    println("COMPILE_TIME_CONST = $COMPILE_TIME_CONST")

    println("\n=== 字符串模板 ===")
    println(description)
}

运行与验证

运行方式:将上述代码保存为 VariablesAndConstants.kt,在命令行执行:

kotlinc VariablesAndConstants.kt -include-runtime -d app.jar
java -jar app.jar

或在 IntelliJ IDEA 中直接创建 Kotlin 文件并运行 main() 函数。

预期输出:程序将依次打印各变量的当前值及其实际类型。关键验证点包括:

  • count 显示为 20(证明 var 可重新赋值);
  • 所有显式声明的变量类型与声明一致(如 explicitLong 类型为 Long);
  • pi、appName 等 val 常量正常输出;
  • 字符串模板正确拼接 language 和 version 的值。

判定标准:若输出中每个变量的值与类型均与代码声明一致,且程序无编译错误,则案例通过。若尝试取消注释 pi = 3.14 重新编译,编译器应报错,这验证了 val 的不可变性。

Kotlin 变量与常量声明结构 var(可变变量) var count = 10 → 类型推断 Int var name = "Kotlin" → 类型推断 String count = 20 → 可重新赋值 ✓ val(不可变常量) val pi = 3.14159 → 类型推断 Double val appName: String = "MyApp" pi = 3.14 → 编译错误 ✗ 显式类型声明 var explicitLong: Long var explicitFloat: Float val maxRetries: Int const val CONST = 100 类型推断机制 编译器根据初始值自动推导类型:整数→Int,小数→Double,字符串→String 显式声明优先级更高:var x: Long = 10 强制为 Long 而非 Int