是否可以安全使用" =="与null比较?

时间:2016-01-20 19:01:06

标签: scala

我曾经无数次地使用过表达式obj != null。有时我使用null == obj

我最近阅读了一些scala标准库来源,并发现obj eq null是唯一用于比较的形式。

使用运算符(.equals)糖进行null比较是否安全?可能有一些隐含的魔法压缩与==版本的正常比较逻辑?

3 个答案:

答案 0 :(得分:1)

是的,是的, 我加: 如果要加速程序,请使用

optionsMenu = new JMenu("Options");
optionsMenu.setMnemonic(KeyEvent.VK_O);
optionsMenu.getAccessibleContext().setAccessibleDescription("Options Menu");
menuBar.add(optionsMenu);

程序将编译得更快

答案 1 :(得分:1)

您始终可以使用==进行对象比较,并且必要时,空值将eq安全地使用equals

请参阅==的{​​{3}}:

  

测试两个对象是否相等。表达式x == that相当于if (x eq null) that eq null else x.equals(that)

因此,如果您有val s: String = null,并且检查了s == null,那么s eq null为真,那么if为真,并返回null eq null ,这也是事实。

事实上,使用==总是比使用equals更安全,因为您实际上可能会调用s.equals(s)(其中snull),这会抛出NPE。

答案 2 :(得分:0)

是的。

在scala中,==优先于equals,因为它处理null并且知道数字等效(1==1L!1.equals(1L)

如果您想要参考相等,请使用等式