自从18年上一家公司用kotlin做了项目之后,新公司就没有用过kotlin了,都快要忘完了,最近又想起来了,再捡了一下吧。
定义变量的方式
java:类型+变量名+值+逗号
1 | int a = 5; |
kotlin:var/val+变量名+(:类型)+值(ps:类型可省略)
var:可变变量(可以重新分配值)
val:只读变量(初始化的时候必须赋值,不能修改)
1 | var c:int |
函数
java:public/private/protected+返回类型+方法名+括号参数+大括号方法体
1 | public void add(int a ,int b){ |
kotlin:fun+方法名+括号参数+(:返回类型)+大括号方法体
返回类型Unit类型,对应java的void,即无返回值,可省略
1 | fun add(a:int,b:int):Unit{ |
if表达式(java中三目运算符)
把a和b两个数中值大的赋值给c
1 | java:三目运算符 |
for循环
1 | //java |
美元符号($)
把$符号放在变量前面,输出的就是变量的值
1 | val i = 3 |
== 和 ===的区别
类似于java中的==和equals的区别
java:==判断值是否相等,equals判断物理地址是否相等
kotlin:==判断物理地址是否相等,===判断值是否相等
数据类型的转换:toInt(),toBoolean()等等
1 | //java中不同数据类型的相互转换是强转 |
is运算符
个人觉得is运算符类似于java中的instanceof关键字
1 | //java:判断某个变量是否是某个类型的 |
空指针和lateinit
要明确一点:java中才会有空指针异常,kotlin中不存在空指针异常,因为它有非空判断机制
比方说,我们如果要在kotlin定义一个Bitmap变量,我们知道Bitmap是非常占内存的,用完之后我们要手动置空
在类型的后面加上问号,用的时候也要加问号才能用,表示不为空的时候才会往下走,如果为空就不会往下走了
1 | var bitmap:Bitmap? = null |
那么,我们如果要定义一个不可能为空的对象怎么定义呢?
1 | lateinit var bitmap:Bitmap |
黑科技:when表达式和Any(任意类型)
when表达式取代java中的switch,when的返回值依据每一个条件的返回值来定,可以返回任意类型,从上往下按顺序执行,else不能少
1 | lateinit var obj : Any |
比方说这里,先定义个可以是任意类型变量的的obj,如果传进来的是Int类型的1,则返回int类型的2。如果传进来的是String类型的变量,则返回int类型的3。其他,则返回boolean类型的true
when可以取代 if-else if链。如
1 | val x = 10 |
区间
顾名思义:在某个范围内
1 | //等同于 x >= 1 && x <= 4(包括1,包括4),从1到4 |