xin*_*ong 6 java scala intellij-idea
正如屏幕截图所示,当我将相同的文字值与 Float 和 Long 类型进行比较时,Scala 表示它不相等
但评估者却说他们是平等的!
我怀疑这是 Intellij Idea 中的一个错误,因为相同的代码在正常的 Scala 运行时中会产生与评估器运行时不同的结果。
如果评估者的结果不可信,这可能会给开发者带来麻烦。
我想知道我的想法是否有问题,希望有人指出。
我无法使用 Intellij 评估器重现您的示例(尽管我不使用 Mac,这可能是 Mac 版本 Intellij 上的错误),但我可以说 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
Run Code Online (Sandbox Code Playgroud)
由于 Scala 被设计为一种更常规的语言,因此通过对==这些类的方法进行特殊封装,从语言中消除了这种差异:
val vl: Long = 32294629407L
val vf: Float = 32294629407f
val res11 = vl == vf // true
println(res11) // true
Run Code Online (Sandbox Code Playgroud)
== 不直接调用的唯一情况
equals是 Java 的装箱数字类型。
笔记:
对于 Scala 的早期版本,这并不成立,因为在 Scala 2.12 中这似乎是无效的。