柚子快報(bào)激活碼778899分享:Kotlin 變量
柚子快報(bào)激活碼778899分享:Kotlin 變量
文章目錄
變量的聲明基本類型數(shù)字定義比較大小
布爾字符字符串字符串模板數(shù)組定義訪問元素
類型轉(zhuǎn)換類型判斷
變量的聲明
在 Kotlin 中,使用val定義不可變變量,使用var定義可變變量,定義的格式如下:
[val|var] [變量名][: 變量類型] = [變量值]
變量名可以隨意取,但不能以數(shù)字開頭,也不能包含特殊字符,使用關(guān)鍵字時(shí)需要加反引號(hào)``(英文輸入法,在鍵盤左上角Esc下方的~鍵)。Kotlin 可以使用中文命名變量,但是非常不推薦這樣做,IDEA 也給出了警告。
fun main() {
val 你好Kotlin = "Hello Kotlin."
println(你好Kotlin)
}
Hello Kotlin.
這里定義一個(gè)String類型的名為name的可變變量,和一個(gè)Int類型的名為id的不可變變量:
fun main() {
// 定義 String 類型的可變變量,并賦值為 "A"
var name: String = "A"
// 將變量的值改為 "B"
name = "B"
// 定義 Int 類型的不可變變量,并賦值為 0
val id: Int = 0
// id = 1 這樣是錯(cuò)誤的,val修飾的變量一旦賦值就不能更改
}
Kotlin 支持自動(dòng)類型推斷,因此,在能夠推斷出類型的情況下,可以不用指定類型:
fun main() {
var name = "A"
// 在沒有賦值的情況下,無法推斷類型,所以得指出類型
val id: Int
id = 1
}
Kotlin 變量也可以聲明在main函數(shù)外部:
val id = 0
fun main() {
println(id)
}
0
基本類型
數(shù)字
定義
在數(shù)字類型中,包含有符號(hào)(負(fù)號(hào))類型Byte、Short、Int、Long、Float、Double(類型間差異主要在于取值范圍,參考。如果給出的值超出范圍,IDEA 將直接標(biāo)紅),和對(duì)應(yīng)的無符號(hào)類型UByte、UShort、UInt、ULong。
Float類型必須在數(shù)值末尾加F或f,Long類型則可以選擇性地在末尾加上L或l(由于小寫l與數(shù)字1長得太像,一般用大寫),所有的無符號(hào)類型必須加上U或u,ULong可以選擇性地在末尾加上L(不能是小寫)。
fun main() {
val byte: Byte = 1
val short: Short = 1
val int: Int = 1
val long: Long = 1
val float: Float = 1.0f
val double: Double = 1.0
val uByte: UByte = 1u
val uShort: UShort = 1u
val uInt: UInt = 1u
val uLong: ULong = 1u
}
當(dāng)沒有特別指出類型時(shí),整數(shù)一般會(huì)自動(dòng)推斷為Int,而小數(shù)會(huì)是Double,數(shù)字末尾標(biāo)記F或f會(huì)是Float,而U或u會(huì)是uInt。
fun main() {
val int = 1
val float = 1.0f
val double = 1.0
val uInt = 1u
}
Kotlin 支持在數(shù)字間加上下劃線_方便閱讀,下劃線可以加在隨意的數(shù)字之間的位置,但一般還是遵循常用的分割方式
fun main() {
val largeInt = 1_000_000_000
// 你可以隨意加
val int = 1_0
}
比較大小
可以使用>、<、==(不能用于不同類型)、>=、<=比較數(shù)字大?。?/p>
fun main() {
println(1 > 0f)
println(1 < 2L)
println(1 == 1)
println(1 >= 0f)
println(1 <= 2L)
}
true
true
true
true
true
布爾
布爾類型Boolean只有兩個(gè)值:true或false。
fun main() {
val booleanTrue: Boolean = true
val booleanFalse = false
}
多數(shù)時(shí)候,Boolean會(huì)和&&(與)、||(或)、!(非)一起使用。
&&可連接兩個(gè)Boolean,只有兩者都為true,整體的值才為true。當(dāng)兩者都為true時(shí),整體為true;當(dāng)一個(gè)為true,一個(gè)為false時(shí),整體為false;當(dāng)兩者都為false時(shí),整體為false。val TRUE = true
val FALSE = false
fun main() {
println(TRUE && TRUE) // true
println(TRUE && FALSE) // false
println(FALSE && FALSE) // false
}
true
false
false
||可連接兩個(gè)Boolean,只要有一個(gè)值為true,整體的值才為true。當(dāng)兩者都為true時(shí),整體為true;當(dāng)一個(gè)為true,一個(gè)為false時(shí),整體為true;當(dāng)兩者都為false時(shí),整體為false。val TRUE = true
val FALSE = false
fun main() {
println(TRUE || TRUE) // true
println(TRUE || FALSE) // true
println(FALSE || FALSE) // false
}
true
true
false
!放置于Boolean前,會(huì)使整體變?yōu)榱硪粋€(gè)值,!true整體為false,!false整體為false。val TRUE = true
val FALSE = false
fun main() {
println(!TRUE) // false
println(!FALSE) // true
}
false
true
字符
字符是指代表一個(gè)符號(hào)的內(nèi)容(不一定只有一個(gè)符號(hào)),使用單引號(hào)''修飾。
fun main() {
val char: Char = 'a'
}
單個(gè)反斜杠\作為轉(zhuǎn)義字符使用,和一些字符結(jié)合會(huì)成為單個(gè)字符,具體可參考:
反斜杠與t組成制表符:fun main() {
val tab = '\t'
print(tab)
print("Hello")
}
Hello
反斜杠與n組成換行符:fun main() {
val enter = '\n'
print(enter)
print("Hello")
}
Hello
單個(gè)反斜杠并不會(huì)表示反斜杠,需要用一對(duì)\\fun main() {
val char = '\\'
print(char)
}
\
在雙引號(hào)""中使用雙引號(hào)"字符會(huì)導(dǎo)致句意混亂,需要使用\輔助:fun main() {
val string: String = "\""
println(string)
}
"
字符串
字符串由一個(gè)或多個(gè)字符組成,用雙引號(hào)""或者""" """(多行)修飾。 當(dāng)你輸入"""并回車后,trimIndent()函數(shù)會(huì)自動(dòng)加上,它會(huì)去掉首尾("""所在的行)空行和縮進(jìn)。
fun main() {
var string: String = "Hello Kotlin."
println(string)
string = """
Hello
Kotlin
""".trimIndent()
println(string)
}
Hello Kotlin.
Hello
Kotlin
字符串模板
在 Kotlin 中,可以很自然地使用+將字符串與字符串或其他類型拼接起來:
fun main() {
val hello = "Hello"
val name = "Kotlin"
println(hello + " " + name)
}
Hello Kotlin
我們也可以在字符串中使用美元符$實(shí)現(xiàn)拼接:
fun main() {
val hello = "Hello"
val name = "Kotlin"
println("$hello $name")
}
Hello Kotlin
為了將變量名與字符串區(qū)分開,必要時(shí)需要加上花括號(hào){}
fun main() {
val dog = "dog"
println("${dog}s")
}
dogs
數(shù)組
定義
你可以使用arrayOf函數(shù)定義一個(gè)數(shù)組:
fun main() {
val array = arrayOf(1, 2)
print(array)
}
[Ljava.lang.Integer;@7291c18f
可以看到我們打印出了一個(gè)看不懂的東西,單看整體其實(shí)可以理解為該數(shù)組的唯一標(biāo)識(shí)。通過查詢可以知道一個(gè)[表示這是一個(gè)一維數(shù)組,以此類推,L表名后面的java.lang.Interger是一個(gè)引用類型,而@后邊的是哈希碼。 如果要打印出數(shù)組中值,可以使用joinToString()函數(shù),它會(huì)將數(shù)組元素拼接為字符串:
fun main() {
val array = arrayOf(1, 2)
println(array.joinToString())
}
1, 2
Note:有些函數(shù)需要用.調(diào)用,例如數(shù)組的joinToString()這是定義在數(shù)組類中的函數(shù);而有些可以直接寫函數(shù)名,這是像main一樣的頂層函數(shù)(Top Level Function)。
你可以在數(shù)組中放任意的內(nèi)容:
fun main() {
arrayOf(1, 2, "3")
arrayOf( arrayOf(1, 2) , 3)
}
訪問元素
數(shù)組可以用方括號(hào)[]配合下標(biāo)(Index)訪問指定的元素,數(shù)組中的元素下標(biāo)從0開始依次遞增,當(dāng)我們要獲取第一個(gè)元素的值時(shí),我們需要使用0。
fun main() {
val array = arrayOf("你", "好")
println(array[0])
}
你
當(dāng)下標(biāo)超出數(shù)組元素下標(biāo)范圍時(shí),會(huì)引起異常java.lang.ArrayIndexOutOfBoundsException:
fun main() {
val array = arrayOf("你", "好")
println(array[2])
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2
at ink.awning.MainKt.main(Main.kt:6)
at ink.awning.MainKt.main(Main.kt)
類型轉(zhuǎn)換
數(shù)字與String類型之間的轉(zhuǎn)換可以用toXXX()(XXX為要轉(zhuǎn)換的類型)來實(shí)現(xiàn),例如String轉(zhuǎn)為Int使用toInt():fun main() {
val string = "11"
val number = string.toInt()
// IDEA 會(huì)標(biāo)紅,鼠標(biāo)放在上面會(huì)提示
// Operator '==' cannot be applied to 'String' and 'Int'
println(string == 11) // 無法比較
// 此時(shí)可以正常比較
println(number == 11) // true
// 也可以寫在一行
println(string.toInt() == 11) // true
}
使用as關(guān)鍵字,一般是用于子父類之間或泛型的轉(zhuǎn)化,如果無法轉(zhuǎn)化會(huì)拋出異常。fun main() {
// 子父類,MutableList 繼承自 List
val mutableList = mutableListOf(1, 2)
val list = mutableList as List
println(list)
// 同為 List,泛型轉(zhuǎn)換為其他類型
val intList = listOf(1, 2, 3)
val stringList = intList as List
stringList.forEach { print(it); print(", ") }
}
Note:as關(guān)鍵字還可以用于導(dǎo)包時(shí)起別名:import ink.awning.ClassName as NewClassName。
類型判斷
可以使用is判斷某一變量是否為某一類型,!is則相反:
fun main() {
val string: Any = ""
println(string is String)
println(string !is Int)
}
Note:Any表示該變量可以為任意類型。
柚子快報(bào)激活碼778899分享:Kotlin 變量
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。