关于kotlin的可空与非可空:
- 在写代码的时候感觉是两种类型,那么他们在字节码上是不同的类型吗?
- 方法的调用分为a.b(),a?.b(),a!!.b(),他们有什么区别?
本题由@xujiafeng贡献,大家如果想问的问题,可以去这里点击发起提问
更多问答 >>
-
每日一问 | 听说你做过内存优化 之 Bitmap内存占用到底在哪?
2021-04-19 23:40 -
2021-05-06 00:16
-
每日一问 | view.requestLayout如果在灭屏或者切home之后调用会怎么样?
2021-05-06 00:16 -
每日一问 | 已经有了 Intent,那为啥还要 PendingIntent?
2021-05-28 00:29 -
2021-05-28 00:29
-
每日一问 | mipmap vs drawable,傻傻分不清楚?
2021-03-30 21:14 -
每日一问 | onDraw 里面调用 invalidate 做动画,有什么问题?
2021-04-13 00:31 -
每日一问 | 在做性能优化的时候,常常看到 Thread(Cpu) Time,Wall clock Time?
2021-03-15 00:43 -
2021-03-18 23:20
-
每日一问 | 今天还探索一个 View 的方法 hasOverlappingRendering()
2021-02-21 20:16
在Kotlin中定义变量如下
反编译后结果如下所示
可以看出,主要就是通过
如果是可空,调用前会相应的判断如果是!!,调用前会做检查,如果为空则抛出异常@Nullable
与@NotNull
注解来区分可空与不可空是同一种类型,只是编译的时候会类似加上java的注解Nullable和NotNull。
至于调用的区别类似这样
a?.b()等同于
if(a!=null){ a.b()}a!!.b() 等同于
if(a==null){throw Npe()}如果是自定义类型,则是在a.b() 之前会调用一次,checkNull,
如果是基本类型,则如果是 Int? 则类型为 Integer 如果是 Int 则类型为 int
其他以此类推