在以下代码中,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
答案 0 :(得分:0)
涉及两个不同的概念:静态(编译时)类型和运行时类型。声明val a: AnyRef
只会影响其静态类型,但在运行时其值为"hello"
,因此运行时类型为String
。 isInstanceOf
测试运行时类型。
编译器不是“评估价值并将a
视为String
”; JVM是。