Scala 比较Int和Double-没有警告?

Scala 比较Int和Double-没有警告?,scala,equality,Scala,Equality,鉴于以下案例类别: scala> case class Foo(x: Int) defined class Foo scala> case class Bar(x: Int) defined class Bar 编译器在尝试比较不同case类的实例时显示警告 scala> Foo(5) == Bar(5) <console>:15: warning: comparing case class values of types Foo and Bar using `

鉴于以下案例类别:

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

scala> case class Bar(x: Int)
defined class Bar
编译器在尝试比较不同case类的实例时显示警告

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
因为==是Int的重载方法,其中一个接受Double作为参数类型,Double和其他许多方法也是如此。这是100%合法的

abstract def ==(x: Double): Boolean
请参阅。

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

abstract def ==(x: Double): Boolean
请参阅。

我猜res8:Boolean=false的原因是,您通过比较Foo5==Bar5来比较对象Foo和Bar的实例,因为实例的地址总是不同的,错误结果在警告中很明显。在验证之前,==方法总是将参数转换为double

像这样试试

    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
我猜res8:Boolean=false的原因是,您正在通过比较Foo5==Bar5来比较对象Foo和Bar的实例,因为实例的地址总是不同的,错误的结果在警告中很明显。在验证之前,==方法总是将参数转换为double

像这样试试

    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