关键字
val
用于值从不更改的变量,使用val
声明的变量无法重新赋值。var
用于值可以更改的变量。
变量初始化
val languageName: String = "Kotlin"
var count: Int = 10
更改变量
var count: Int = 10
count = 15
变量必须初始化
错误示例:
var e: Int
println(e)
// Variable 'e' must be initialized
可以自由选择何时初始化变量,但是,必须在首次读取之前对其进行初始化
正确示例:
val d: Int // 声明未初始化
if (someCondition()) {
d = 1
} else {
d = 2
}
//初始化
println(d) // d=1
类型推断
val c = 3 //判断类型为Int
Kotlin 是一种静态类型的语言,类型将在编译时解析且从不改变。
val languageName = "Kotlin"
val upperCaseName = languageName.toUpperCase()//String类专用函数
languageName.inc()
//languageName 推断为 String,无法对其调用任何不属于 String 类的函数
// Fails to compile
Null安全
默认情况下,Kotlin 变量不能持有 null 值
错误示例:
val languageName: String = null
// Fails to compile
var neverNull= "This can't be null"
neverNull = null // 尝试分配给具有推断类型的变量时,会产生编译错误
正确示例:
val languageName: String? = null
指定 String?
类型后,可以为 languageName
赋予 String
值或 null
。
必须小心处理可为 null 的变量,否则可能会出现可怕的 NullPointerException
。例如,在 Java 中,如果尝试对 null 值调用方法,程序会发生崩溃。