【问题标题】:What is difference between "as Long" and ".toLong()" in Kotlin?Kotlin 中的 \"as Long\" 和 \".toLong()\" 有什么区别?
【发布时间】:2022-10-14 17:45:15
【问题描述】:

这是一个例子:

    val a: Int = 6
    val b = a.toLong()
    val c = a as Long

有什么区别.toLong()只要关键词?还有什么更好的使用方法

【问题讨论】:

  • 一种有效,一种无效。

标签: kotlin operator-keyword


【解决方案1】:

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

另一方面,as 运算符根据language spec 执行以下操作:

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

就 Kotlin 的类型系统而言,Int 不是Long 的子类型,所以这个检查总是会失败,这个表达式总是会抛出异常。请注意,这与Java's type system 不同。其中原始int原语long 的子类型。

【讨论】:

    【解决方案2】:

    使用 as 将该对象转换为该类型。它仅在它实际上是那种类型时才有效。您会看到您的代码实际上在您尝试将Int 转换为Long 的地方崩溃。 toLong() 函数实际上把它变成了Long

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2018-12-22
      • 2022-01-21
      • 2023-03-14
      • 2019-08-19
      • 1970-01-01
      相关资源
      最近更新 更多