强制转换和安全强制转换运算符和null有什么区别

时间:2018-06-29 11:45:38

标签: kotlin

让我们说我有2个表达式:

val x: Int? = null as Int?

val x: Int? = null as? Int?

它们之间有什么区别?

为什么第一个是不安全的演员?

1 个答案:

答案 0 :(得分:3)

实际上,当强制转换失败时,不安全的强制转换会引发异常,而当强制转换操作失败时,安全的强制转换将转换为null

val x1: Int? = 1.0 as? Int?
println(x1)

此打印:

null

这段代码在这里:

val x: Int? = 1.0 as Int?

引发异常:

Exception in thread "main" java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer