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

‌Kotlin中的?.和!!主要区别

目录

1、?.和!!介绍

2、使用场景和最佳实践

3、代码示例和解释


1、?.和!!介绍

Kotlin中的?.!!主要区别在于它们对空指针的处理方式。

  • ?.(安全调用操作符)‌:当变量可能为null时,使用?.可以安全地调用其方法或属性。如果变量为null,则不执行调用,直接返回null。例如:

    val name: String? = null
    println(name?.length) // 输出 null,因为 name 为 null

    这种方式不会抛出空指针异常,而是安全地处理null值‌。

  • !!(非空断言操作符)‌:当变量可能为null时,使用!!会强制执行调用,如果变量为null,则会抛出空指针异常。例如:

val list: ArrayList<String>? = null
println(list!!.size) // 如果 list 为 null,则会抛出 NullPointerException

这种方式相当于在Java中的断言操作,即如果变量为null,则抛出异常‌。

2、使用场景和最佳实践

  • 使用?.‌:当你需要安全地处理可能为null的变量时,使用?.可以避免空指针异常,确保代码的健壮性。例如在UI渲染中,避免因数据未准备好而导致的崩溃。
  • 使用!!‌:当你确信变量不会为null,或者需要在变量为null时抛出异常以提醒开发者时,可以使用!!。这种方式适用于内部逻辑处理,确保逻辑的正确性。

3、代码示例和解释

  • 安全调用(?.‌:
val name: String? = null
println(name?.length) // 输出 null,因为 name 为 null
  • 非空断言(!!‌:
val list: ArrayList<String>? = null
println(list!!.size) //如果 list 为 null,则会抛出 NullPointerException


http://www.kler.cn/a/410029.html

相关文章:

  • [模版总结] - 树的基本算法4 -最近公共祖先 LCA
  • DataGear 5.2.0 发布,数据可视化分析平台
  • Linux---ps命令
  • 基于Java Springboot公园管理系统
  • ES6 、ESNext 规范、编译工具babel
  • 【计算机网络】多路转接之poll
  • Spring Boot集成MyBatis-Plus:自定义拦截器实现动态表名切换
  • 【AI】基础原理
  • 第三百三十一节 Java网络教程 - Java网络UDP多播
  • PyTorch 分布式并行计算
  • 使用Go语言实现线程安全的Map
  • 区块链网络示意图;Aura共识和Grandpa共识(BFT共识)
  • 通过 LangChain 使用 GPT 生成创意项目:详细教程
  • 完全二叉树的基本操作(顺序存储)
  • uniapp中uni-popup在小程序中滚动穿透问题
  • 不同查询构建器的使用方式(Mybatis、Mybatis-Plus、Mybatis-Flex、Spring Data JPA、QueryDsl)
  • Softing线上研讨会 | Ethernet-APL:推动数字时代的过程自动化
  • 用PythonSudio在控件中添加、删除控件,并传递参数(以ScrollBox中添加删除按钮为例)
  • 应用系统开发(14) 涡流检测系统硬件设计
  • 室内定位论文速递(11.23-11.25)
  • 微信小程序WXSS全局样式与局部样式的使用教程
  • 基于 Docker 的持续集成/持续交付(CI/CD)流水线构建实战
  • idea-java项目中的全部接口提取
  • 质量留住用户:如何通过测试自动化提供更高质量的用户体验
  • 五、数组基本使用方法
  • unordered_set 和unordered_map的模拟实现(使用开散列)