1

我在 scala 解释器中得到了这个:

scala> val a:Float = 71F; val b:Int = 71; if (a==b) println ("?")
?
a: Float = 71.0
b: Int = 71

我想知道这种比较的确切语义是什么。尽管我对 Scala 有肤浅的了解,但我猜浮点数算术(在这种情况下,我确保不使用与 java 的 BigDecimal 等效的东西,或者至少我认为如此)适用于这个示例。所以“a”不像“b”那样持有数字71,而是接近它的东西。

我认为使任何整数到浮点比较产生 false 都会简化事情,但我确信我一定遗漏了一些东西。

在旁注中,我想知道这是否会导致代码中的任何错误。

4

2 回答 2

5

正如JLS 15.21.1中所指定的,Java 中也会发生同样的事情。Scala 可能继承了这种语义以实现兼容性。

于 2013-11-09T15:43:03.000 回答
2

由于隐式转换,此声明是从 Java 继承的,如您在Scaladoc中所见

Implicit information
    This member is added by an implicit conversion from Int to Integer performed by method int2Integer in scala.Predef. 

为了更安全,请使用===Scalaz

于 2013-11-09T16:29:32.603 回答