我不小心注意到以下情况:
scala> class g[T](val x:T)
defined class g
scala> val obj=new g[Int]('A')
obj: g[Int] = g@1082d45
scala> obj.x
res6: Int = 65
这里发生了什么?一个类型转换?
答案 0 :(得分:2)
它是基元的上转换。如果看起来需要,原始值将自身转换为下一个数字更大的类型。所以val s: Short = (0: Byte)
有效。没有任何内容会转换为Char
,但Char
会成为Int
,Long
,Float
或Double
,如果它需要是正确的话参数类型。
这样做的原因主要是因为Java就是这样做的,但部分是因为从val d: Double = 0
获取错误真的很烦人,因为0
当然适合于Double
没有任何问题,也没有关于类型的歧义。
答案 1 :(得分:2)
另见:
默认情况下启用以下隐式转换。
implicit def char2int(x: Char): Int = x.toInt
在这种情况下,预期类型为Int
。因此转换Char
值。