Kotlin学习笔记

lateinit 和 by lazy的区别:

是kotlin里面的延迟初始化实现,
1.lateinit 只用于变量 var,而 lazy 只用于常量 val
2.lateinit可以在任何位置初始化并且可以初始化多次。而lazy在第一次被调用时就被初始化,想要被改变只能重新定义
3.lazy 应用于单例模式(if-null-then-init-else-return),当且仅当变量被第一次调用的时候,想要被改变只能重新定义,委托方法才会执行(有点类似懒加载);lateinit可以在任何位置初始化并且可以初始化多次。
4.lateinit 则用于只能生命周期流程中进行获取或者初始化的变量,比如 Android 的 onCreate()

变量?和!!

? :定义变量时,可在类型后面加一个问号?,表示该变量是Nullable,不加表示该变量不可为null(不加?编译的时候默认先执行非空判断)。对于可以为null的变量,在使用该变量的时候,必须用变量名+?(如上面的s?)的形式进行调用,表示如果该变量为null,则不执行该变量调用的方法
! : 表示当前对象不为空的情况下执行

val与var

var:定义可变变量
val :定位常量,java里面的final

open关键字

open 注解与java 中的 final相反:它允许别的类继承这个类。默认情形下,kotlin 中所有的类都是 final ,open用来表示他可以被集成

==和===区别

1.Referential/引用相等(两个引用指向同一对象): ===(否定形式!==)是对象引用(地址),即判断是否同一个对象!
2.Structural/结构相等(用equals()检查): ==(否定形式!=)是通过equals()函数进行比较!

let,apply,with,run函数区别

https://www.jianshu.com/p/28ce69d58fea

Kotlin集合

https://blog.csdn.net/xsg2357/article/details/80417980
https://www.jianshu.com/p/6d95db6e9f87

你可能感兴趣的:(Kotlin学习笔记)