【Kotlin】空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )

news2024/12/23 10:00:53

在这里插入图片描述

文章目录

  • 一、非空断言操作符 !!
  • 二、使用 if 语句判空





一、非空断言操作符 !!



Kotlin 中的 可空类型 变量 , 在运行时 可以选择 不启用 安全调用 操作 ,

在调用 可空类型 变量 成员 与 方法 时 , 使用 非空断言操作符 !! ,

如果 可空类型 变量为 空 , 则 直接抛出 空指针异常 KotlinNullPointerException ;


代码示例 : 在下面的代码中 , name 变量是 String? 可空类型 ,

变量值为 null ,

如果使用 name?.count() 的方式调用 , 则会先判定 name 是否为空 , 如果为空则该代码不会执行 ,

如果使用 name!!.count() 的方式调用 , 不会判定 name 是否为空 ,

如果 为空 抛出 KotlinNullPointerException 异常 ;

fun main() {
    var name: String? = null
    println(name!!.count())
}

执行结果 :

Exception in thread "main" kotlin.KotlinNullPointerException
	at HelloKt.main(Hello.kt:3)
	at HelloKt.main(Hello.kt)

在这里插入图片描述





二、使用 if 语句判空



在 Kotlin 中 , 对于 可空类型 变量的调用 , 除了使用

  • 空安全调用操作符 ?
  • 非空断言操作符 !!

之外 , 还可以使用 Java 语言中的传统判空方式 ,

if 语句判断 变量 是否为 null ;


空安全调用操作符 ? 与 使用 if 语句判空操作 对比 :

  • 空安全调用操作符 更加 灵活 , 简洁 ;
  • 空安全调用操作符 可以进行 链式调用 ;

二者的效果是等价的 ;


代码示例 1 : 下面的代码是 使用 if 语句判空 的示例 ;

fun main() {
    var name: String? = null
    var count: Int? = null
    if(name != null) {
        count = name.count()
    }
    println(count)
}

执行结果 :

null

在这里插入图片描述


代码示例 2 : 下面的代码 与 代码示例 1 的 效果是等价的 , 显然本代码更加简洁 ;

fun main() {
    var name: String? = null
    var count: Int? = name?.count()
    println(count)
}

执行结果 :

null

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署k8s集群

环境准备准备三台虚拟机,建议最小硬件配置:2核CPU、2G内存、20G硬盘 ,可以访问外网,💡ps:以下命令在三台虚拟机上都要执行一遍,直到kubeadm init设置虚拟机hostname sudo hostnamectl set-hostn…

性能优化系列之『混合式开发:小程序内核及优势介绍』

文章の目录一、愿景二、技术优势三、底层内核四、行业背景五、选型建议写在最后一、愿景 触手可及:用户扫一扫或者搜一下即可打开应用用完即走:不用关心是否安装太多应用 二、技术优势 H5 相比 App 开发,开发门槛更低优于 H5,接…

指针进阶篇(1)

目录 🤔 前言🤔 一、😊字符指针😊 二、😜指针数组😜 三、😝数组指针😝 3.1数组指针的定义 3.2&数组名VS数组名 3.3数组指针的使用 四、🌝数组参数&#xff0c…

LeetCode算法之----回溯

目录 【一】前言 【二】全排列 【三】电话号码的字母组合 【四】括号生成 【五】组合总和 【六】子集 【七】总结 【一】前言 回溯算法采用试错的思想,尝试分步的来解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的…

helm、k8s dasboard、rancher、kubesphere介绍及使用

文章目录1. helm 安装及使用概述1.1 helm 安装1.1.1 添加仓库1.2 helm 常用命令2. dashboard 部署使用2.1 安装helm repo 源2.2 安装dashboard2.3 查看dashboard 运行状态2.4 创建dashboard-admin.yaml文件2.5 创建登录用户2.6 查看admin-user账户的token2.7 登录dashboard2.8 …

非对称加密实战(二):解决web项目不支持https问题 ,添加证书【附源码】

目录web项目http请求变为https请求解决无法访问https问题重启再次访问https出现链接不安全,但是可以继续访问认证文件加入域名参数生成客户端认证文件证书安装源码地址web项目 http请求变为https请求 http请求 https请求 解决无法访问https问题 需要把 非对称加密实战(一…

【博客576】警惕docker本身iptables规则对网络的影响

警惕docker本身iptables规则对网络的影响 警惕1:k8s环境下,独立拉取docker容器时,进行端口映射会有问题 场景: 在k8s节点由于某种原因,比如:需要拉起一个docker环境来制作镜像,需要拉起一些不…

靶机测试Os-hacknos-3笔记

靶机介绍Difficulty: IntermediateFlag: 2 Flag first user And the second rootLearning: Web Application | Enumeration | Privilege EscalationWeb-site: www.hacknos.comContact-us : rahul_gehlautThis works better with VirtualBox rather than VMware靶机地址https://…

nuPlan: A closed-loop ML-based planning benchmark for autonomous vehicles

Paper name nuPlan: A closed-loop ML-based planning benchmark for autonomous vehicles Paper Reading Note URL: https://arxiv.org/pdf/2106.11810.pdf TL;DR nuPlan 比赛,提出了规控领域新数据集 Introduction 背景 当前自动驾驶规划任务中使用专家系统…

正确实践Jetpack SplashScreen API —— 在所有Android系统上使用总结,内含原理分析

1.前言 文章末尾有演示的APK链接,感兴趣的同学,可以自行下载体验一下 官方Android 12的Splash Screen文档地址 官方Splash Screen兼容库,支持所有版本系统 本篇文章主要围绕下面三个问题来介绍: 我们能从Android 12 SplashScree…

订单数据越来越多,如何优化数据库性能?

“增删改查”都是查找问题,因为你都得先找到数据才能对数据做操作。那存储系统性能问题,其实就是查找快慢问题。 存储系统一次查询所耗时间取决两个因素: 查找的时间复杂度数据总量 查找的时间复杂度取决于: 查找算法存储数据…

基于Java-SpringBoot+vue实现的前后端分离信息管理系统设计和实现

基于Java-SpringBootvue实现的前后端分离信息管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

后台执行限制总结

后台限制的发展历程 前台定义 针对后台Service procState < PROCESS_STATE_IMPORTANT_BACKGROUND7 针对后台启动Activity procState < PROCESS_STATE_BOUND_TOP3 针对后台启动FGS/后台启动FGS的while-in-use权限 procState < PROCESS_STATE_BOUND_FOREGROUND_SERVICE…

【Linux】文本编辑器-vim使用

目  录1 vim的基本概念2 vim的基本操作3 vim常用模式命令集3.1 vim正常模式命令集3.2 vim末行模式命令集4 vim的简单配置1 vim的基本概念 vim编辑器与vi编辑器一样都是多模式编辑器&#xff0c;不同的是vim编辑器是vi编辑器的升级版本&#xff0c;vim不仅兼容vi的所有指令&am…

Django by Example·第二章|Enhancing Your Blog with Advanced Features@笔记

Django by Example第二章|Enhancing Your Blog with Advanced Features笔记 这本书的结构确实很不错&#xff0c;如果能够坚持看下去&#xff0c;那么Django框架的各种用法也就掌握的七七八八了。之前写过一篇这本书的第一章&#xff0c;看完第一章就算是入门了&#xff0c;但…

acwing差分

题目&#xff1a;输入一个长度为 n 的整数序列。接下来输入 m 个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数&#xff0c;表示整…

【C++高阶数据结构】跳表(skiplist)

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

第十一章Thymeleaf学习

文章目录什么是Thymeleaf什么是模板引擎Thymeleaf的同行Thymeleaf优势一个实例来认识大概过程导入对应的jar包配置对应的xml文件对应的ViewBaseServlet编写——对应的模板引擎写对应的Servlet类并且继承ViewBaseServlet对应index.html资源——对应的模板Thymeleaf的基础语法th名…

337. 打家劫舍 III

目录题目思路代码题目 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”…

笔试强训(11)

第一题:二进制插入二进制插入__牛客网 给定32位整数n和m&#xff0c;同时我们指定i和j&#xff0c;将m的二进制位数插入到n的二进制位数的j到i位&#xff0c;我们保证n的j到i位均是等于0的&#xff0c;况且m的二进制位数小于等于i-j1&#xff0c;其中二进制的位数从0开始从低到…