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

devtools/2024/11/26 23:39:25/

目录

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.ppmy.cn/devtools/137246.html

相关文章

基于联邦学习的卫星-地面集成网络移动流量预测

论文标题&#xff1a;Federated Learning-Based Mobile Traffic Prediction in Satellite-Terrestrial Integrated Networks 作者信息&#xff1a;Weiwei Jiang1,2, Jianbin Mu3, Haoyu Han1,2, Yang Zhang1,2, Sai Huang1,2 Key Laboratory of Universal Wireless Communicat…

《用Python画蔡徐坤:艺术与编程的结合》

简介 大家好&#xff01;今天带来一篇有趣的Python编程项目&#xff0c;用代码画出知名偶像蔡徐坤的形象。这个项目使用了Python的turtle库&#xff0c;通过简单的几何图形和精心设计的代码来展示艺术与编程的结合。 以下是完整的代码和效果介绍&#xff0c;快来试试看吧&…

elasticsearch的文档管理

2 json数据入门 json数据类型 基础数据类型 字符串&#xff0c;只要用双引号包裹的都是字符串类型。“嘻嘻”&#xff0c;“文勇”&#xff0c;“2024” 数字型&#xff0c;2024&#xff0c;3.1415926 布尔型&#xff0c;true 和 false 空值&#xff0c;null 高级数据类…

彻底理解Redis的过期策略

一.由来 因为现在Redis的使用是非常普遍的&#xff0c;Redis是基于内存的数据存储系统&#xff0c;而内存相比于早些年而言&#xff0c;还是便宜了很多&#xff0c;但是相比硬盘而言还是最很多&#xff0c;因此提高Redis里面的内存利用率是非常重要&#xff0c;而Redis的过期策…

淘宝商品评论爬虫:Java版“窃听风云”

在这个信息爆炸的时代&#xff0c;淘宝评论就像是隐藏在商品页面背后的小秘密&#xff0c;等待着我们去发掘。今天&#xff0c;我们将化身为“数据侦探”&#xff0c;使用Java编写一个爬虫程序&#xff0c;潜入淘宝的评论区&#xff0c;窃取那些珍贵的用户反馈。请注意&#xf…

R语言处理JSON文件

R语言处理JSON文件 引言 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集&#xff0c;但JSON是独立于语言的文本格式&#xff0c…

C 语言面向对象

面向对象的基本特性&#xff1a;封装&#xff0c;继承&#xff0c;多态 1.0 面向过程概念 当我们在编写程序时&#xff0c;通常采用以下步骤&#xff1a; 1. 将问题的解法分解成若干步骤 2. 使用函数分别实现这些步骤 3. 依次调用这些函数 这种编程风格的被称作 面向过程…

Python 网络爬虫操作指南

网络爬虫是自动化获取互联网上信息的一种工具。它广泛应用于数据采集、分析以及实现信息聚合等众多领域。本文将为你提供一个完整的Python网络爬虫操作指南&#xff0c;帮助你从零开始学习并实现简单的网络爬虫。我们将涵盖基本的爬虫概念、Python环境配置、常用库介绍。 上传…