我无法使用IntelliJ赋值器重现您的示例(尽管我不使用Mac,这可能是IntelliJ的Mac版本上的一个错误),但我可以说的是,Java和Scala对此的处理是不同的.实际上,在Scala 2.13.x中,这些值是相等的.
Java根据代码的类型(原语类型和包装类型)以不同的方式处理该代码:
long vl = 32294629407L;
float vf = 32294629407f;
Boolean res11 = vl == vf;
System.out.println(res11); // true
Long vl1 = 32294629407L;
Float vf1 = 32294629407f;
Boolean res22 = vl1.equals(vf1);
System.out.println(res22); // false
由于Scala被设计为一种更常规的语言,因此通过对以下类的==
方法进行特殊封装,消除了该语言中的此类差异:
val vl: Long = 32294629407L
val vf: Float = 32294629407f
val res11 = vl == vf // true
println(res11) // true
唯一一种==不直接调用
equals
的情况是Java 带框的数字类型.
NOTE:
对于以前的Scala版本,这是不成立的,因为在Scala 2.12中,这似乎是无效的.