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

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

相关文章:

  • linux文件重命名命令
  • html,js获取扫码设备的输入内容
  • HTTPS和HTTP区别
  • springboot3.x只需两步快速整合nacos作配置中心
  • javaweb-html
  • springboot使用xdoc-report包导出word
  • 【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化
  • 深度学习Y8周:yolov8.yaml文件解读
  • Python60日基础学习打卡D32
  • 强化学习鱼书(7)——神经网络和Q学习
  • TCP全连接和tcpdump抓包实现
  • 量化研究--ATR高频量化网格策略实盘研究
  • cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins
  • JavaWebsocket-demo
  • Spark Core 源码关键环节的深度解析
  • mapbox进阶,手写放大镜功能
  • Windows安装MongoDb.并使用.NET 9连接
  • 前后端的双精度浮点数精度不一致问题解决方案,自定义Spring的消息转换器处理JSON转换
  • [杂学笔记]浏览器多进程与多线程架构、wstring类型、哈希表、红黑树与哈希表的对比、C++标准库Random类
  • 每日算法 -【Swift 算法】寻找字符串中最长回文子串(三种经典解法全解析)
  • 凤阳鼓楼修缮疑云:施工方曾允许自然人违规挂靠和转包
  • 欧洲要求参与俄乌谈判,美称俄乌不需要第三方
  • 为小龙虾洗清这些“黑锅”,这份科学吃虾指南请收好
  • 破题“省会担当”,南京如何走好自己的路?
  • 上海普陀:探索1岁以下托育服务的保育内容、人员配备等关键要素
  • 春决火爆的背后,PEL如何做大这块电竞蛋糕