Note that such comparison warnings only work if at least one type extends AnyVal, because anything else could be null.
In general, == should be used with caution, since its meaning can vary.
scala> Double.NaN == Double.NaN
res2: Boolean = false
scala> class X(val x: Int)
defined class X
scala> new X(1) == new X(1)
<console>:13: warning: comparing a fresh object using `==' will always yield false
new X(1) == new X(1)
^
res10: Boolean = false
scala> case class XY(x: Int, y: Int)
defined class XY
scala> XY(1, 2) == XY(1, 2)
res11: Boolean = true
scala> class XYZ(x: Int, y: Int, val z: Int) extends XY(x, y)
defined class XYZ
scala> new XYZ(1, 2, 3) == new XYZ(1, 2, 100)
res4: Boolean = true
scala> 0.1 + 0.2 == 0.3
res8: Boolean = false