比较 Int 和 Double - 没有警告?

Comparing Int to Double - No Warning?

给定以下情况类:

scala> case class Foo(x: Int)
defined class Foo

scala> case class Bar(x: Int)
defined class Bar

编译器在尝试比较不同大小写的实例时显示警告 类。

scala> Foo(5) == Bar(5)
<console>:15: warning: comparing case class values of types Foo and Bar using `==' will always yield false
       Foo(5) == Bar(5)
              ^
res8: Boolean = false

但是下面的对比为什么不给出警告呢?

scala> (5 : Int) == (10 : Double)
res9: Boolean = false

因为==Int的重载方法,其中一个方法接受Double作为参数类型(Double和许多其他方法也是如此) .这是 100% 合法的。

abstract def ==(x: Double): Boolean

参见scaladocs

我猜 res8: Boolean = false 的原因是因为您通过比较 Foo(5) == Bar(5) 来比较对象 Foo and Bar 的实例,因为实例的地址总是不同的并且 false 结果很明显,有警告。 == 方法在验证之前总是将参数转换为双精度。

这样试试

    case class Foo(x: Int)
    case class Bar(x: Double)

    val a = Foo(5)
    val b = Bar(5)

    a.x == b.x //res4: Boolean = true
    a == b //res5: Boolean = false