scala编译器是否动态转换对象的类型(在运行时)

时间:2017-11-16 09:52:58

标签: scala

在以下代码中,a被声明为AnyRef,但类型String的类型检查也是如此。 Scala编译器是否在运行时转换对象的类型?

scala> val a:AnyRef = "hello"
a: AnyRef = hello

scala> a.isInstanceOf[String]
res6: Boolean = true

scala> a.isInstanceOf[Any]
res8: Boolean = true

scala> a.isInstanceOf[AnyRef]
res9: Boolean = true

scala> a.isInstanceOf[Object]
res12: Boolean = true

1 个答案:

答案 0 :(得分:0)

涉及两个不同的概念:静态(编译时)类型和运行时类型。声明val a: AnyRef只会影响其静态类型,但在运行时其值为"hello",因此运行时类型为StringisInstanceOf测试运行时类型。

编译器不是“评估价值并将a视为String”; JVM是。