2017-03-14 55 views
0

我想初始化Int类型的变量作为斯卡拉null,但我不能这样做 -为什么Int不能在Scala中初始化为null?

scala> val a: Int = null 
<console>:11: error: an expression of type Null is ineligible for implicit conversion 
    val a: Int = null 

但我可以在Scala中初始化String类型的变量作为null

scala> val a: String = null 
a: String = null 

任何人都知道它的原因?

注意 - 我使用Scala的2.11.8

+0

不是问题的答案,但将它声明为'Option [Int]'会更正常(更好),这样你就可以清楚地知道它可能不是,而空值总是令人讨厌的惊喜 –

+0

这很好@RichardTingle,我使用'Option [Int]'来代替'null'。但是,那么为什么Scala允许我为'String'类型执行它? – himanshuIIITian

+0

请参阅http://stackoverflow.com/questions/39210830/why-in-scala-long-cannot-in-initialized-to-null-whear-as-integer-can – nmat

回答

4

空是所有引用类型的子类型;它的唯一实例是空引用。由于Null不是值类型的子类型,因此null不是任何此类型的成员。例如,不可能将null分配给scala.Int类型的变量。 另一方面,String是AnyRef的子类型,允许将null赋值为值。 对于层次结构reference

相关问题