我曾经无数次地使用过表达式obj != null
。有时我使用null == obj
。
我最近阅读了一些scala标准库来源,并发现obj eq null
是唯一用于比较的形式。
使用运算符(.equals
)糖进行null
比较是否安全?可能有一些隐含的魔法压缩与==
版本的正常比较逻辑?
答案 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)
(其中s
是null
),这会抛出NPE。
答案 2 :(得分:0)
是的。
在scala中,==
优先于equals
,因为它处理null
并且知道数字等效(1==1L
但!1.equals(1L)
)
如果您想要参考相等,请使用等式