当前位置: 首页 > article >正文

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

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.lengthprintln(length1)
# 输出结果3
  1. 如果使用 ?. 操作符,返回值为可空类型,接收则需要一个可空类型的变量,否则会报错
var name: String = "Tom"val length2: Int? = name?.lengthprintln(length2)
# 输出结果3
var name: String = "Tom"val length2: Int = name?.lengthprintln(length2)
# 输出结果Kotlin: Type mismatch: inferred type is Int? but Int was expected
2、对于不可空类型
  • 对于一个可空类型的变量,不能直接调用它的方法,需要使用 ?. 操作符,返回值为可空类型,接收则需要一个可空类型的变量,否则会报错
var name: String? = nullval length1: Int? = name?.lengthprintln(length1)
# 输出结果null
var name: String? = nullval length2: Int = name.lengthprintln(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
http://www.lryc.cn/news/2387058.html

相关文章:

  • 【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用:从配置到函数调用全解析
  • git 删除某个远程库的分支
  • Redis实战-缓存篇(万字总结)
  • QT5.15 MacOS 打包指南
  • Nginx location匹配模式详解
  • Vue 3 路由传参使用指南
  • vscode使用ssh链接服务器
  • 企业批量处理刚需PrintPDF 网络财务办公打印 网页到 Office 一键转 PDF
  • Python学习笔记--Django 表单处理
  • Python - 文件部分
  • 【监控】Blackbox Exporter 黑盒监控
  • 历年福州大学保研上机真题
  • 【RAG】ragflow源码亮点:文档embedding向量化加权融合
  • 大模型学习笔记day2 LoRA微调
  • Maven-概述-介绍安装
  • GitHub Page填写域名显示被占用
  • js实现监听Ctrl/Cmd+C复制、Ctrl/Cmd+Z撤销 等快捷键
  • java高级 -动态代理
  • 机器学习算法:线性回归
  • NotePad++编辑Linux服务器文档
  • 常见小问题(Open Folder as PyCharm Project)
  • 第四十四节:目标检测与跟踪-模板匹配
  • Trae中使用mcp连接MariaDB
  • 第12次04 :首页展示用户名
  • MFC: 文件加解密(单元测试模块)
  • vue+ThreeJs 创建过渡圆圈效果
  • MySQL:12_视图
  • 2025 年开源 LLM 发展趋势细致解读
  • win11+vs2022 安装opencv 4.11.0图解教程
  • n8n 读写本地文件