enter image description here

如屏幕截图所示,当我将相同的字面值与Float和Long类型进行比较时,Scala说它不相等

但是判断者说他们是平等的!

我怀疑这是IntelliJ Idea中的一个错误,因为相同的代码在正常的Scala运行时会产生与在赋值器运行时不同的结果.

如果判断者的结果不可信,这可能会给开发人员带来麻烦.

我想知道我的 idea 是否有什么问题,希望有人能指出.

推荐答案

我无法使用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中,这似乎是无效的.

Java相关问答推荐

虚拟线程似乎在外部服务调用时阻止运营商线程

将linkedHashMap扩展到Java中的POJO类

Select 按位运算序列

为什么BasicComboBoxRenderer在文本不存在或文本为空的情况下设置两次文本?

使用动态ID从json获取详细信息的Jolt规范

存根基类的受保护方法

与不同顺序的组进行匹配,不重复组但分开

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

GetChildren().emoveAll()不会删除 node

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

如何以编程方式保存workBench.xmi?

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

具有多个模式的DateTimeForMatter的LocalDate.parse失败

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

控制器建议异常处理

如何在JSP中从select中获取值并将其放入另一个select

如何在单元测试中获得我的装饰Mapstruct映射器的实例?

升级版本后出现非法访问错误

try 添加;按流派搜索;在Web应用程序上,但没有;I don’我不知道;It’这个代码错了