比较Int到Double - 没有警告?

时间:2015-07-08 03:25:20

标签: scala equality

给出以下案例类:

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

2 个答案:

答案 0 :(得分:4)

因为==Int的重载方法,其中一个接受Double作为参数类型(同样适用于Double,还有许多其他类型)。这是100%合法的。

abstract def ==(x: Double): Boolean

请参阅scaladocs

答案 1 :(得分:0)

我想res8: Boolean = false的原因是因为您通过比较Foo and Bar来比较对象Foo(5) == Bar(5)的实例,因为实例的地址总是不同而{{1}警告显示结果很明显。在验证之前,false方法总是将参数转换为double。

试试这个

==