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
英文地址,請注明出處:http://en.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…