1.java中的空指针
java最常见,最危险的错误
在java中,我们最常见的错误莫过于空指针异常。不好好的处理的话,程序很容易出现崩溃的现象。
NullPointerException 是java程序员的噩梦,最最高频的bug
出现空指针的现象是常见的,也是最危险的。那怎么去解决呢?
在java中,我们需要主动去检查这个引用对象是否为空。
这就有个很大的缺点:我们会常常不经意,或者忘了去检查,在程序跑起来的时候,才意识到出现了空指针异常。
2.kotlin的优雅处理方案
在编译时期就处理了可能会产生空指针的情况,若产生空指针,会编译不通过
从而避免了执行代码时出现空指针异常
例如:var name:String 是正常声明,不能出现null,
name=null,编译器提示出错。
var name:String? 声明变量name可以null
name=null,是可以正常通过的
核心点变量声明时候就要明确是否可以null,如果不可以null但后续有null情况编译器会提醒。
如果声明可以null,后续编译器也会做很多贴心的帮助减少代码量,不用自己判断。
安全调用操作符:?
java中空指针的处理就是if else判断,null怎么办,non-null怎么办。
kotlin通过一个?声明大大节约了代码。
kotlin中有操作符“?”就是声明变量 name 可能有空的情况出现,需要处理,默认情况出现空直接打印 null
Elvis 操作符 ?:
在你的表达式为null的时候执行 ?:
后面的操作
!! 操作符
当你操作的对象为空的时候,抛出空指针异常!
任性的输出KotlinNullPointerException 感觉没多大意义,好的代码应该尽量避免出现!!,太不可控了。
出现!!的情况大概率是:当你使用AS将Java代码转换成Kotlin代码后会出现很多的!! 操作符,因为出现!!意味着这里可能有未捕获的KotlinNullPointerException异常。
自己书写代码尽量多用?操作符在编译器就拦截住空指针,不要用!!操作符,大量!!操作符出现kotlin是无法帮助你解决可能出现的空指针异常了。
3.总结
kotlin主要编译器对null处理了。
1情况1可能有空,那就提醒程序后续代码要注意处理,需要程序员做的判断,默认处理了
2.情况2不会空,但是后续出现空的用法,直接编译器提醒出来
个人理解kotlin中把空
当作一种类型