【发布时间】:2022-10-14 17:45:15
【问题描述】:
这是一个例子:
val a: Int = 6
val b = a.toLong()
val c = a as Long
有什么区别.toLong()和只要关键词?还有什么更好的使用方法
【问题讨论】:
-
一种有效,一种无效。
这是一个例子:
val a: Int = 6
val b = a.toLong()
val c = a as Long
有什么区别.toLong()和只要关键词?还有什么更好的使用方法
【问题讨论】:
a.toLong() 在a 上调用toLong 方法,因此它会执行toLong 方法所做的任何事情。此方法通常使用本机代码实现。比如在JVM上,可以用i2lJVM指令来实现。
另一方面,as 运算符根据language spec 执行以下操作:
此表达式执行运行时检查
E的运行时类型是否是T的子类型,否则抛出异常。就 Kotlin 的类型系统而言,
Int不是Long的子类型,所以这个检查总是会失败,这个表达式总是会抛出异常。请注意,这与Java's type system 不同。其中原始int是原语long的子类型。
【讨论】:
使用 as 将该对象转换为该类型。它仅在它实际上是那种类型时才有效。您会看到您的代码实际上在您尝试将Int 转换为Long 的地方崩溃。 toLong() 函数实际上把它变成了Long。
【讨论】: