Kotlin 中的“as Long”和“.toLong()”有什么区别?

nin*_*u19 8 operator-keyword kotlin

这是一个例子:

    val a: Int = 6
    val b = a.toLong()
    val c = a as Long
Run Code Online (Sandbox Code Playgroud)

.toLong()as Long关键字有什么区别?什么是更好的使用方法

Swe*_*per 8

a.toLong()调用该toLong方法a,因此它将执行该toLong方法所做的任何事情。该方法通常用本机代码实现。例如在JVM上,可以用i2lJVM指令来实现。

as另一方面,运算符根据语言规范执行以下操作

该表达式执行运行时检查 的运行时类型是否E是 的子类型T,否则抛出异常。

所以as只在运行时进行检查。“转换”仅在编译时发生,通过语言强制表达式的类型e as T 必须T.

就 Kotlin 的类型系统而言,Int不是 的子类型Long,因此此检查将始终失败,并且此表达式将始终抛出异常。请注意,这与Java 的类型系统不同。其中原语int 原语的子类型long