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

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.xdnf.cn/news/7772.html

相关文章:

  • 什么是endpoints?
  • php://filter的trick
  • Server-Driven UI:Kotlin 如何重塑动态化 Android 应用开发
  • 《算法笔记》12.1小节——字符串专题->字符串hash进阶 问题 A: 求最长公共子串(串)
  • 代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)
  • ARM反汇编浅析
  • 【JAVA】比较器Comparator与自然排序(28)
  • Flannel后端为UDP模式下,分析数据包的发送方式(一)
  • 【react18】在styled-components中引入图片报错
  • 项目中Warmup耗时高该如何操作处理
  • 深度解析 Java 中介者模式:重构复杂交互场景的优雅方案
  • 详解 C# 中基于发布-订阅模式的 Messenger 消息传递机制:Messenger.Default.Send/Register
  • 服务器网络配置 netplan一个网口配置两个ip(双ip、辅助ip、别名IP别名)
  • Java详解LeetCode 热题 100(18):LeetCode 73. 矩阵置零(Set Matrix Zeroes)详解
  • 广州卓远VR受邀参加2025智能体育典型案例调研活动,并入驻国体华为运动健康联合实验室!
  • 深入解析异步编程:Java NIO、Python `async/await` 与 C# `async/await` 的对比
  • junit单元测试
  • Ajax研究
  • [Linux] Linux信号量深度解析与实践(代码示例)
  • VLA模型:自动驾驶与机器人行业的革命性跃迁,端到端智能如何重塑未来?
  • docker 启动一个python环境的项目
  • 零数组变换 二分+查分数组||线段树lazy
  • 算法C++最大公约数
  • Linux条件变量
  • 从零基础到最佳实践:Vue.js 系列(4/10):《Vue Router 路由管理:深入探索与实战应用》
  • 选择合适的Azure数据库监控工具
  • 【Java学习方法】类变量
  • 七彩喜防摔马甲:科技守护银发安全的“隐形铠甲”
  • LabVIEW风机状态实时监测
  • 【前端基础】12、CSS的overflow(visible、hidden、scroll、auto)【注:只有最基础的说明。】