2017-11-16 23 views
-3

をゼロにするために割り当てられているオブジェクトの種類は何ですか、sコードを以下に

scala> val s:String = null 
s: String = null 

//cannot check if instance is of type Null 
scala> s.isInstanceOf[Null] 
<console>:13: error: type Null cannot be used in a type pattern or isInstanceOf test 
     s.isInstanceOf[Null] 
        ^

//s is no longer a String or Any or AnyRef 
scala> s.isInstanceOf[String] 
res2: Boolean = false 

scala> s.isInstanceOf[AnyRef] 
res4: Boolean = false 

scala> s.isInstanceOf[Any] 
res5: Boolean = false 

scala> s.isInstanceOf[Object] 
res11: Boolean = false 

答えて

0

まあのタイプのもので、nullはちょうどnullであり、それは、オブジェクト、オブジェクトとしてではありませんすべてのクラスの父は、nullはオブジェクトであるならば、このコードは

val s:String=null;println(s.isInstanceOf[Object])

真を返す必要があり、その後ですが、実際にはfalseを返すので、nullはちょうどヌルであり、それは任意の型を持っていません。スナップショット enter image description hereを参照してくださいD

+0

"nullはちょうどnullで、型はありません" - そうではありません。 'null'の型は' scala.Null'です。 'scala.Null'は参照型の* Bottom Type *なので、' scala.AnyRef'(* scala.AnyRef'を含む)のすべての*サブタイプのサブタイプです。だから、「ヌルは型​​を持たない」というステートメントは間違っています。実際には、 'null'は型だけでなく、すべての型*(または少なくともすべての参照型)を持ちます。 –

+0

さて、isInstanceof [scala.null]のようにすると本当ですか? –