// 防御式 null 检查
if (text != null) {
int length = text.length();
}// 链式调用 — 层层判空
if (user != null && user.getAddress() != null) {
String city = user.getAddress().getCity();
}// @Nullable 注解 — 只有提示作用,不强制
public @Nullable String getNickname() { ... }
// 安全调用 — ?. 如果左边为 null 直接返回 null
val length = text?.length// 链式安全调用
val city = user?.address?.city// Elvis 操作符 — 左边为 null 时取右边默认值
val name = user?.name ?: "未命名"// 确定不为 null 时强制调用 — !!(不建议)
val length = text!!.length // 如果 text 为 null 直接 NPE
Kotlin 的类型系统在编译期强制区分 String(不可为 null)和 String?(可为 null)。String? 类型不能直接传给需要 String 的方法,必须先做 null 检查。这比 Java 的 @Nullable 注解强一万倍——后者只是一个 decorator,IDE 标黄但不影响编译。

!! 操作符是"我知道这个不是 null,别管了",但如果你判断错了,崩的是 KotlinNullPointerException。代码审查里看到 !! 应该本能地警觉,绝大多数情况应该用 ?. 或 ?: 替代。
Java Android 老项目迁移系列,持续更新中。