欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin實用語法糖空安全類型轉換及相等性判斷

 更新時間:2022年06月23日 15:22:09   作者:Carson.Ho  
這篇文章主要為大家介紹了Kotlin實用語法糖空安全類型轉換及相等性判斷示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

Kotlin被Google官方認為是Android開發(fā)的一級編程語言。今天,我將主要講解,關于Kotlin的一些實用語法糖,主要包括:

  • 范圍使用:in、downTo、step、until
  • 類型檢查 & 轉換:is、智能轉換、as
  • 相等性:equals()、== 、 ===
  • 空安全

1. 范圍使用

主要用于表示范圍,主要包括:in、downTo、step、until

/**
 *  1. in
 *  作用:在...范圍內
 **/
// 表示:若i在1-5范圍內,則執(zhí)行下面代碼
// 注:閉區(qū)間,[1,5]
if (i in 1..5) {
    println("i 在 1-5 內")
}
// 表示:若i不在1-5范圍內,則執(zhí)行下面代碼
// !in表示不在...范圍內
if (i !in 1..5) {
    println("i 不在 1-5 內")
}
/**
 *  2. until
 *  作用:表示開區(qū)間
 **/
// 輸出1234
for (i in 1 until 5) {
 println(i)
}
/**
 *  3. downTo
 *  作用:倒序判斷
 **/
 for (i in 5 downTo 1) {
 	println(i)
 }
/**
 *  4. step
 *  作用:調整步長
 **/
// 設置步長為2,順序輸出1、3、5
for (i in 1..5 step 2) println(i) 
// 設置步長為2,倒序輸出5、3、1
for (i in 1 downTo 5 step 2) println(i) 

2. 類型檢查 & 轉換

包括:is、智能轉換 和 as

/**
 *  1. is
 *  作用:判斷一個對象與指定的類型是否一致
 **/
// 判斷變量a的數據類型是否是String
var a: Any = "a"
if (a is String) {
    println("a是String類型")
}
if (a !is Int) {
    println("a不是Int類型")
}
/**
 *  2. 智能轉換
 *  說明: kotlin不必使用顯式類型轉換操作,因為編譯器會跟蹤不可變值的is檢查以及顯式轉換,并在需要時自動插入(安全的)轉換
 **/
 var a: Any = "a"
if (a is String) {
    println("a是String類型")
    println(a.length) // a 自動轉換為String類型
    //輸出結果為:1
}
// 反向檢查: a自動轉換為String類型
if (a !is String) {
	print(a.length)
}
// 在 && 和 || 的右側也可以智能轉換:
// `&&` 右側的 a 自動轉換為String
if (a is String && a.length > 0)
// `||` 右側的 a 自動轉換為String
if (a is String || a.length > 0)
// 在when表達式和while循環(huán)里也能智能轉換:
when(a){
    is String -> a.length
    is Int -> a + 1
}
// 需要注意:當編譯器不能保證變量在檢查和使用之間不可改變時,智能轉換不能用。智能轉換能否適用根據以下規(guī)則:
// 1. val 局部變量——總是可以,局部委托屬性除外;
// 2. val 屬性——如果屬性是 private 或 internal,或者該檢查在聲明屬性的同一模塊中執(zhí)行。智能轉換不適用于 open 的屬性或者具有自定義 getter 的屬性;
// 3. var 局部變量——如果變量在檢查和使用之間沒有修改、沒有在會修改它的 lambda 中捕獲、并且不是局部委托屬性;
// 4. var 屬性——決不可能(因為該變量可以隨時被其他代碼修改)
/**
 *  3. 強制類型轉換:as
 **/
var any: Any = "abc"
var str: String = any as String
// 強制類型轉換是不安全的,若類型不兼容則會拋出一個異常
var int: Int = 123
var str: String = int as String
// 拋出ClassCastException
/**
 *  4. 可空轉換操作符:as?
 *  作用:null不能轉換為String,因該類型不是可空的,此時使用可空轉換操作符as?
 **/
var str = null
var str2 = str as String
// 拋出TypeCastException
// 使用安全轉換操作符as?可以在轉換失敗時返回null,避免了拋出異常。
var str = null
var str2 = str as? String
println(str2) //輸出結果為:null

3. 相等性判斷

在Kotlin中,存在結構相等 & 引用相等 兩種相等判斷。

/**
 *  1. 結構相等:equals()或 ==
 *  作用:判斷兩個結構是否相等
 **/
var a = "1"
var b = "1"
if (a.equals(b)) {
    println("a 和 b 結構相等")
    // 輸出結果為:a 和 b 結構相等
}
var a = 1
var b = 1
if (a == b) {
    println("a 和 b 結構相等")
    // 輸出結果為:a 和 b 結構相等
}
/**
 *  2. 引用相等:===
 *  作用:判斷兩個引用是否指向同一對象
 */ 
// 設置一個類如下
data class User(var name: String, var age: Int)
// 設置值
var a = User("Czh", 22)
var b = User("Czh", 22)
var c = b
var d = a
// 對比兩個對象的結構
if (c == d) {
    println("a 和 b 結構相等")
} else {
    println("a 和 b 結構不相等")
}
// 對比兩個對象的的引用
if (c === d) {
    println("a 和 b 引用相等")
} else {
    println("a 和 b 引用不相等")
}
// 輸出結果:
a 和 b 結構相等
a 和 b 引用不相等

4. 空安全

  • 在Java中,NullPointerException異常十分常見
  • 而Kotlin的優(yōu)點則是可以盡可能避免執(zhí)行代碼時出現的空指針異常
/**
 *  1. 可空類型與非空類型
 *  在Kotlin中,有兩種情況最可能導致出現NullPointerException
 **/
// 情況1:顯式調用 throw NullPointerException()
// 情況2:使用!! 操作符
// 說明:!!操作符將任何值轉換為非空類型,若該值為空則拋出異常
var a = null
a!!
// 拋出KotlinNullPointerException
// 情況3:數據類型不能為null
// 在 Kotlin 中,類型系統(tǒng)區(qū)分一個引用可以容納 null (可空引用) 和 不能容納(非空引用)
// 如:String類型變量不能容納null
// 若要允許為空,可聲明一個變量為可空字符串:在字符串類型后面加一個問號?
對于String,則是寫作:String?
var b: String? = "b"
b = null
/**
 *  2. 安全調用操作符
 *  作用:表示如果若不為null才繼續(xù)調用
 **/
 b?.length
 // 表示:若b不為null,才調用b.length
 // 注:安全調用符還可以鏈式調用
 a?.b?.c?.d
 // 假設a不為null,才繼續(xù)往下調用,以此類推
 // 若該鏈式調用中任何一個屬性為null,整個表達式都會返回null。
 // 若只對非空值執(zhí)行某個操作,可與let一起使用
a?.b?.let { println(it) }

至此,關于Kotlin的入門語法講解完畢,更多關于Kotlin空安全類型轉換相等性判斷的資料請關注腳本之家其它相關文章!

相關文章

  • Android 照片選擇區(qū)域功能實現示例

    Android 照片選擇區(qū)域功能實現示例

    這篇文章主要介紹了Android 照片選擇區(qū)域功能實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Android String資源文件插入值實例詳解

    Android String資源文件插入值實例詳解

    這篇文章主要介紹了Android String資源文件插入值實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • Android仿微信圖片選擇器

    Android仿微信圖片選擇器

    這篇文章主要為大家詳細介紹了Android仿微信圖片選擇器的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android使用Retrofit實現自定義Converter解析接口流程詳解

    Android使用Retrofit實現自定義Converter解析接口流程詳解

    Retrofit是一個RESTful的HTTP網絡請求框架的封裝,網絡請求的工作本質上是OkHttp完成,而Retrofit僅負責網絡請求接口的封裝
    2023-03-03
  • 如何調用百度地圖API實現手機自動定位

    如何調用百度地圖API實現手機自動定位

    api手機自動定位,通過聲明地址解析器,獲取當前坐標,如何調用百度地圖api實現手機自動定位呢?接下來,一起跟小編來學習吧。
    2015-09-09
  • Android編程自定義title bar(標題欄)示例

    Android編程自定義title bar(標題欄)示例

    這篇文章主要介紹了Android編程自定義title bar(標題欄)的方法,結合實例形式分析了Android針對標題欄的設置與頁面布局操作相關技巧,需要的朋友可以參考下
    2016-10-10
  • 實例解析如何在Android應用中實現彈幕動畫效果

    實例解析如何在Android應用中實現彈幕動畫效果

    這篇文章主要介紹了如何在Android應用中實現彈幕動畫效果的實例,文中是利用RelativeLayout布局然后控制ViewGroup中view的顯示,細節(jié)展示得比較詳細,需要的朋友可以參考下
    2016-04-04
  • Android讀寫文件工具類詳解

    Android讀寫文件工具類詳解

    這篇文章主要為大家詳細介紹了Android讀寫文件工具類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Android動態(tài)更換應用圖標詳情

    Android動態(tài)更換應用圖標詳情

    這篇文章主要介紹了Android動態(tài)更換應用圖標詳情,文章圍繞主題展開詳細的介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • android使用AsyncTask實現多線程下載實例

    android使用AsyncTask實現多線程下載實例

    這篇文章主要介紹了android使用AsyncTask實現多線程下載實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論