Kotlin-空值和空类型

变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象

在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题

在这里插入图片描述
Kotlin中所有的类型默认都是非空类型。如果我们希望某个变量在初始情况下使用 null 而不去引用某一个具体对象, 此时就需要将变量的类型修改为可空类型,只需要在类型名称的后面添加一个?即可:

fun main() {var str: String? = null
}

既然现在是可空类型,那么当一个变量为null时,这时候使用类的一些成员方法或是获取成员属性时, 会出现一些问题:

在这里插入图片描述
此时为了安全,就需要对变量进行判断

fun main() {var str: String? = nullif (str != null) {println(str.length)}
}

不过有些情况下,我们已经非常清楚一定不为null。即便它是一个可空类型的变量,也要调用成员方法或是获取成员属性

fun main() {var str: String? = null// 使用非空断言操作符 !!. 来明确不会出现 null 问题println(str!!.length)
}

在这里插入图片描述

虽然使用非空断言操作符能够进行强制操作,但是这样实际上并不安全

Kotlin为我们提供了一种更为安全的空类型操作,更安全地访问可能包含null值的对象,也就是安全调用运算符?.

fun main() {var str: String? = nullprintln(str?.length)
}

在这里插入图片描述

fun main() {var str: String? = "abc"println(str?.length)
}

在这里插入图片描述
有时候我们希望如果变量为null,在使用安全调用运算符时,返回一个我们自定义的结果,而不是null。这时候我们可以使用 Elvis运算符?:

  • 左侧为null,返回右侧自定义的值
  • 左侧不为null,返回左边
fun main() {val str: String? = nullval len = str?.length ?: 0println(len)
}

在这里插入图片描述

fun main() {val str: String? = "abc"val len = str?.length ?: 0println(len)
}

在这里插入图片描述

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

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

相关文章

[特殊字符]算法次元突破:螺旋矩阵的“能量解码术” vs 超立方体的“维度折叠指南”

🔍 引言 如果科幻电影中的能量矩阵是算法的考题,你会用螺旋指针破解它的DNA吗? 如果《星际穿越》的五维空间变成编程题,你敢用动态规划丈量时间的褶皱吗? 今天,我们将化身算法世界的能量解…

高光谱相机赋能烟叶分选:精准、高效与智能化的新突破

烟草产业作为中国重要的经济支柱,烟叶分选的质量与效率直接影响行业效益。传统人工分选存在效率低、主观性强、标准难以统一等问题,而机器视觉技术受限于可见光波段,难以捕捉烟叶深层特征。深圳中达瑞和科技有限公司推出的高光谱相机解决方案…

矩阵求导常用公式解析:标量、向量与矩阵的导数计算

矩阵求导常用公式解析:标量、向量与矩阵的导数计算 矩阵求导常用公式解析:标量、向量与矩阵的导数计算矩阵求导的布局问题1. 分子布局 vs 分母布局对比表2. 布局冲突的典型场景分析3. 混合布局的兼容性处理 一、标量对向量求导1. 线性函数求导2. 二次型函…

NocoDB:开源的 Airtable 替代方案

NocoDB:开源的 Airtable 替代方案 什么是 NocoDB?NocoDB 的主要特点丰富的电子表格界面工作流自动化应用商店程序化访问NocoDB 的应用场景使用 Docker 部署 NocoDB1. 创建数据目录2. 运行 Docker 容器3. 访问 NocoDB注意事项总结什么是 NocoDB? NocoDB 是一款功能强大的开源…

全格式文档转 Markdown 工具,Docker 一键部署,支持 API 调用

以下是简要介绍: 这是一款可以快速将任意文档文件转markdown格式内容的工具,提供API转换接口,方便集成与应用原理就是利用libreoffice、pandoc文件转换工具,把所有文档类型的文件逐步转化,最终转成markdown格式的内容…

MATLAB绘制饼图(二维/三维)

在数据分析与展示领域,饼图是一种直观且高效的可视化工具,能够在瞬间传递各部分与整体的比例关系。今天,我将分享一段 MATLAB 绘制二维及三维饼图的代码,助你轻松将数据以饼图形式呈现于众人眼前。 无论是二维饼图的简洁明了&…

AI笔记-1

Halide Perovskites (HPs) 卤化物钙钛矿 卤化物钙钛矿(HPs)已被 公认为 光伏和发光器件 中最有前途的材料之一 在本观点中,我们将探讨钙钛矿的定义,主要聚焦于由 较重卤素(Cl、Br和I)组成的钙钛矿亚群&…

excel表数据导入数据库

前两天,有个两DB之间的数据导出导入的需求。对方提供的是excel表,我这边是mysql数据库,excel表第一行是字段名,之后的行是记录的值。 其实没有多复杂,我先将exel转成csv,结果mysql导入csv,第一行…

智能机器人在物流行业的应用:效率提升与未来展望

随着全球电子商务的蓬勃发展,物流行业正面临着前所未有的挑战和机遇。传统的物流模式已经难以满足日益增长的市场需求,尤其是在效率、成本控制和精准配送方面。智能机器人技术的出现,为物流行业的转型升级提供了强大的动力。本文将探讨智能机…

如何对 Redis 进行水平扩展和垂直扩展以应对微服务流量的增长?

核心概念: 垂直扩展 (Scale Up): 提升单个节点的性能。简单来说就是给现有的 Redis 服务器增加更多的 CPU 、内存、更快的存储(SSD)或更高的网络带宽。水平扩展 (Scale Out): 增加更多节点来分担负载。这意味着部署多个 Redis 实例&#xff…

Elasticsearch知识汇总之ElasticSearch与OpenSearch比较

四 ElasticSearch与OpenSearch比较 OpenSearch项目分为 OpenSearch(源自 Elasticsearch 7.10.2)与 OpenSearch Dashboards(源自 Kibana 7.10.2)两部分。此外,OpenSearch 项目也将成为之前发布的 Elasticsearch 发行版&…

《OmniMeetProTrack 全维会议链智能追录系统 软件设计文档》

撰稿人:wjz 一、引言 1.1 目的 本软件设计文档详细描述了 OmniMeetProTrack 全维会议链智能追录系统的架构、组件、模块设计及实现细节,旨在为开发人员、利益相关者和维护人员提供系统的全面设计蓝图。本文档基于需求定义文档,确保系统实现…

LeetCode 196. 删除重复的电子邮箱

原题题目 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该表的主键列(具有唯一值的列)。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母…

基于WebUI的深度学习模型部署与应用实践

引言 随着深度学习技术的快速发展,如何将训练好的模型快速部署并提供友好的用户交互界面成为许多AI项目落地的关键。WebUI(Web User Interface)作为一种轻量级、跨平台的解决方案,正被广泛应用于各类AI模型的部署场景。本文将详细介绍基于Python生态构建WebUI的技术方案,包…

Spring AI Alibaba-03- Spring AI + DeepSeek-R1 + ES/Milvus + RAG 智能对话应用开发全流程

Spring AI Alibaba-03- Spring AI DeepSeek-R1 ES/Milvus RAG 智能对话应用开发全流程 在[人工智能](AI)应用中,模型通常需要访问外部资源或执行特定操作,例如数据库查询、调用外部API或执行计算任务。Spring AI,作…

某团小程序mtgsig,_token 生成逻辑分析

前言 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 太久不更新 重新找回号 …

nginx服务--基础

1. nginx 介绍 Nginx (engine x) 是一个轻量级,高性能的 HTTP 和 反向代理 服务,也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。其特点是占有内存少,并发能力强 2. nginx优势 1.高并发,高性能 2.高可靠---可以7*24小时…

python如何word转pdf

在Python中,将Word文档(.docx或.doc)转换为PDF可以通过多种库实现。以下是几种常见的方法及详细步骤: 方法1:使用 python-docx comtypes(仅Windows,需安装Word) 适用于Windows系统…

Galini AI 技术实现方案及 GitHub 开源库推荐

Galini AI 技术实现方案及 GitHub 开源库推荐 1. Galini AI 的技术实现方案 根据前面的行业分析,Galini AI 的核心功能围绕 AI 驱动的通信安全,其技术实现可能包括以下模块: 模块 1:实时通信内容分析 功能:实时检测…

DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成

DXFViewer进行中 : -&#xff1e;封装OpenGL -&#xff1e; 解析DXF直线-CSDN博客https://blog.csdn.net/qq_25547755/article/details/147723906 上篇博文 解析dxf直线635条 1. DXFViewer.h #pragma once #include "Application.h" #include <stdio.h> #inc…