Kotlin 极简小抄 P8(不可空类型、可空类型、注意事项、非空断言 !!)

发布于:2025-05-24 ⋅ 阅读:(19) ⋅ 点赞:(0)

Kotlin 概述

  1. Kotlin 由 JetBrains 开发,是一种在 JVM(Java 虚拟机)上运行的静态类型编程语言

  2. Kotlin 旨在提高开发者的编码效率和安全性,同时保持与 Java 的高度互操作性

  3. Kotlin 是 Android 应用开发的首选语言,也可以与 Java 一样用于服务器端开发


一、不可空类型

  1. 默认情况下,Kotlin 中的类型是不可空的,当声明一个变量时,必须给它一个非空的值
var name: String = "Tom"
  1. 当声明一个变量时,给它一个 null,会报错
var name: String = null
# 输出结果

Kotlin: Null can not be a value of a non-null type String

二、可空类型

  1. 要在 Kotlin 中表示一个可以为空的类型,需要在类型后面加上一个问号 ?,这时,可以给它一个 null
var name: String? = null
  1. 也给它一个非空的值
var name: String? = "Tom"

三、注意事项

1、对于不可空类型
  1. 对于一个不可空类型的变量,可以直接调用它的方法
var name: String = "Tom"

val length1: Int = name.length

println(length1)
# 输出结果

3
  1. 如果使用 ?. 操作符,返回值为可空类型,接收则需要一个可空类型的变量,否则会报错
var name: String = "Tom"

val length2: Int? = name?.length

println(length2)
# 输出结果

3
var name: String = "Tom"

val length2: Int = name?.length

println(length2)
# 输出结果

Kotlin: Type mismatch: inferred type is Int? but Int was expected
2、对于不可空类型
  • 对于一个可空类型的变量,不能直接调用它的方法,需要使用 ?. 操作符,返回值为可空类型,接收则需要一个可空类型的变量,否则会报错
var name: String? = null

val length1: Int? = name?.length

println(length1)
# 输出结果

null
var name: String? = null

val length2: Int = name.length

println(length2)
# 输出结果

Kotlin: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

四、非空断言 !!

  1. 对于一个可空类型的变量,使用 !! 操作符,可以将它转换为不可空类型,但是如果它的值为 null,会报错
var str: String? = "Hello World!"

val length = str!!.length;

println(length)
# 输出结果

12
var str: String? = null;

val length = str!!.length;

println(length)
# 输出结果

Exception in thread "main" java.lang.NullPointerException
  1. 对方法的返回值使用 !! 操作符,可以将它转换为不可空类型,但是如果它的值为 null,会报错
fun getStr1(): String? {
    return "Hello World"
}
var str1 = getStr1()!!

println(str1)
# 输出结果

Hello World
fun getStr2(): String? {
    return null
}
var str2 = getStr2()!!

println(str2)
# 输出结果

Exception in thread "main" java.lang.NullPointerException

网站公告

今日签到

点亮在社区的每一天
去签到