Kotlin 基础
变量
变量声明
val,赋值后不可改变变量的值,和Java中的final修饰的变量相似var,赋值后可以改变值
const,声明常量
const 关键字用于修饰 val 类型的变量,表明该 变量 是一个常量。只能修饰顶层属性和类属性,且值必须在编译期就确定,类型只能是 String 和基本类型。
总结:
val和var可以修饰顶层属性、类属性、局部变量val修饰类属性,可以生成getter方法,var修饰类属性可以生成getter和setter方法。- 局部变量不会有
getter和setter,val修饰局部变量相当于 Java 中的 final const只能修饰顶层属性和类属性,值必须在编译期确定,值的类型只能是 String 和final 类型。编译之后,const修饰的变量都被内联替换了。
类型推断
声明变量时同时赋值,即使不显式声明变量的类型,编译器也可以推断出变量的类型。
空安全
Kotlin中,默认类型是非空的,给非空类型变量赋值会编译错误。如果期望变量时可空的,需要在类型后加上?
常见操作符
与Java中不一样的操作符
?表明类型是可空的,如val name: String? = null?:Elvis操作符,表明左值为空时,取右值,如val firstName = name?:'unknown',firstName的值是unknown?.安全调用,左值为空时,值也返回空,如val length = name?.length,length的值也为null!!断言一个表达式非空,如果为空会抛异常==与!=值相等比较,等同于Java中的equals,但是 == 是线程安全的,null == "abc" 不会报错===与!==引用比较,比较的是内存地址,等同于Java中的==$字符串模板中引用变量或表达式_在lambda或解构中代替未使用的参数
类型判断
is 和 !is 可以用来做类型判断,相当于 Java 中的 instanceof,用 is 判断了类型之后,在代码块中可以自动调用对应类型的方法,例如:
if (obj is String) {
print(obj.length)
}
if (obj !is String) { // 与 !(obj is String) 相同
print("Not a String")
} else {
print(obj.length) // 智能转换
}
类型转换
as 可以用来做类型转换,相当于 Java 中的强制类型转换。不安全的转换会在编译期报错。
as? 可以做安全的类型转换,当转换失败是返回 null 。
数据类型
基本的数据类型
Kotlin 不像 Java 一样,没有原始类型(primitive types),一切都是对象。但是编译器会优化编译产物,根据可空或者非空,编译成原始类型或者包装类型:
- 可空类型被编译成包装类型,例如
Int? --> Integer - 非空类型被编译成原始类型,例如
Int --> int
Unit、Any、Nothing
Any所有非空类型的父类,类似于 Java 中的 Object;Nothing表示“永远不会返回,或者不存在的值”,不能被实例化,通常把一个函数的返回值设置为 Nothing 表明这个函数不会返回会抛异常。由于 Nothing 可以赋值给任意类型,也可以将它看做是任意类型的子类型。Unit表示“无意义的返回值”,但是Unit有一个实例
Any ← 所有非空类型的根类型
/ | \
Int String ...
\ | /
Nothing ← 所有类型的子类型(底类型)
Any? ← 所有类型的根类型(包括可空)
/ | \
Int? String? ...
\ | /
Nothing? ← 唯一的值是 null
// 抛一个异常
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
val name: String = user.name ?: fail() // 赋值给String类型的变量
val age: String = if user.age > 0 user.age else fail() // 赋值给Int类型的变量
条件语句
if-else
常规用法和 Java 一样,但是可以 Kotlin 中的 if-else 可以用来当条件表达式,例如:
val String message = if (code == 400) {
"client error"
} else if (code == 500) {
"server error"
} else {
"known error
}
Kotlin 中没有 Java 中的三目运算符 condition ? x : y,类似的用法都可以用三元表达式来实现。
when
当条件较多时,也可以用 when 关键字来做条件判断,示例:
var message: String
when {
code == 400 -> "client error"
code == 500 -> "server errro"
else -> "known error"
}
when 可以带参数也可以不带参数,带参数时,when 的每个条件的返回值都是参数的类型,例如:
var message: String
when (code) {
200 -> "ok"
400 -> "client error"
500 -> "server errro"
else -> "known error"
}
参考
[1] 学习 Kotlin 编程语言.Android Developers
[2] 关键字与操作符.Kotlin 官方文档 中文版
[4] Get started with Kotlin
[5] 阿正的梦工坊.Kotlin 面试题全面解析:从基础到进阶.CSDN.2026-05-18