Kotlin學習筆記(1) - 基礎

基礎語法


1. 類的包名和類存放的路徑可以不匹配。

2. 行尾分號可選,但是如果多條語句在同一行,需要使用分號分隔

3. 沒有問號表達式(condition ? then : else),使用if-else表達式代替

fun max(a:Int, b:Int) = a>b?a:b ? //error

fun max(a:Int, b:Int) = if(a>b) a else b //OK

4. 引用類型不能初始化為null,但是可以在類型聲明后加?強制允許為null

var x:Int = null ?//error

var x:Int? = null ?//ok

5. 使用is關鍵字 代替 instanceof,as 關鍵字代替類型強制轉換(targetType)ref。is條件為true時,不需要在做類型轉換,可以直接當作目標類型使用。

fun getStrLength(x:Any):Int?{

if(x is String)

return x.length //不需要 (x as String).length

return null

}

6. in 關鍵字。

6.1 遍歷集合

for(i in 1..5) println(i)

6.2 判斷是否在集合中,類似contains。 前面加 ! 表示不在集合中。

println(2 in 1..5) //true

println(2 !in 1..5) //false

6.3 !非操作符,可以和in,is,=,==結合

!in 不在

!is 不是

!= 不等于 值不相等, 如果是引用類型,且沒有定義equals方法,那么結果為true

!== 引用不相等

7. 比較運算符:== 值比較,調用equals方法,如果類型沒有定義equals方法,始終為false;

=== 引用比較,比較是否指向同一個引用

data class User(val name:String, val id:Int)

val x = User("zt", 1)

val y = User("zt", 1)

println(x == y) // true,相當于x.equals(y)。 data class會自動生成equals方法

println(x === y) //false,比較引用是否相同

//無equals方法

class User(val name:String, val id:Int)

val x = User("zt", 1)

val y = User("zt", 1)

println(x == y) // false,沒有定義equals方法

println(x === y) //false,比較引用是否相同

8. when 可以做表達式,或語句;可以帶參數(shù),或不帶參數(shù)

9. data class 類自動生成的copy方法是淺拷貝(值拷貝)

data class Foot(var color:String)

data class Animal(val foot:Foot)

fun main(args: Array) {

val duck1 = Animal(Foot("yellow"))

val duck2 = duck1.copy()

val duck3 = Animal(Foot("yellow"))

println("duck1 == duck2 is ${duck1 == duck2}") //鴨子1和鴨子2看起來一樣

println("duck1 === duck2 is ${duck1 === duck2}") //鴨子1和鴨子2不是同一只

println("duck1' foot == duck2' foot ?is ${duck1.foot == duck2.foot}") //鴨子1和鴨子2腳的顏色看起來一樣

println("duck1' foot === duck2' foot ?is ${duck1.foot === duck2.foot}") //鴨子1和鴨子2公用一雙腳,連體腳。

println("duck1' foot == duck3' foot ?is ${duck1.foot == duck3.foot}") //鴨子1和鴨子3腳的顏色看起來一樣

println("duck1' foot === duck3' foot ?is ${duck1.foot === duck3.foot}") //鴨子1和鴨子3的腳不是同一雙,獨立的

duck2.foot.color ="blue" //把鴨子2的腳染成藍色,同時鴨子1的腳也會變成藍色,因為它們的腳是連體的。

println("duck1 = ${duck1}")

println("duck2 = ${duck2}")

println("duck3 = ${duck3}")

}

輸出:

duck1 == duck2 is true

duck1 === duck2 is false

duck1' foot == duck2' foot ?is true

duck1' foot === duck2' foot ?is true

duck1' foot == duck3' foot ?is true

duck1' foot === duck3' foot ?is false

duck1 = Animal(foot=Foot(color=blue))

duck2 = Animal(foot=Foot(color=blue))

duck3 = Animal(foot=Foot(color=yellow))

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容