2017-06-26 160 views
1

我刚刚开始从Java来的Scala。斯卡拉隐式类型铸造

所以我知道,在Scala中,所有的东西都是对象,和Scala最长的令牌(来源:http://www.scala-lang.org/docu/files/ScalaTutorial.pdf)相匹配,所以,如果我理解正确:

var b = 1.+(2) 

,则B是一个双,再加上和Int ,在Java中这将是一个双。 但是,当我通过println(b.isInstanceOf[Int])检查它的类型时,我发现它是一个Int。为什么它不像Java中的Double?

回答

3

按照specification

1.不是有效的浮点字面因为.后强制位丢失。

我相信这是干过这样的,正是因为像1.+(2)表达式应该被解析为一个整数1,方法调用.,方法名+和方法论证(2)

0

编译器默认将1和2视为Ints。你可以使用1.toDouble强制其中任何一个为双精度,结果(b)为双精度。

顺便说一句 - 你的意思是写1.0 + 2 - 在这种情况下b将是双?