我曾經使用表達obj != null
無數次。有時我使用null == obj
。使用「==」與null進行比較安全嗎?
我剛剛讀過一塊scala標準庫資源,發現obj eq null
是唯一用於比較的形式。
使用運算符(即.equals
的糖)是否可以安全地比較null
的版本?可能有些隱式魔法粉碎與==
版本的正常比較邏輯?
我曾經使用表達obj != null
無數次。有時我使用null == obj
。使用「==」與null進行比較安全嗎?
我剛剛讀過一塊scala標準庫資源,發現obj eq null
是唯一用於比較的形式。
使用運算符(即.equals
的糖)是否可以安全地比較null
的版本?可能有些隱式魔法粉碎與==
版本的正常比較邏輯?
您可以隨時使用==
的對象比較,和空值會必要時安全使用eq
而不是equals
。
見scaladoc爲==
:
測試相等的兩個對象。表達式
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。
是的, 我補充一下: 如果你加快你的程序,使用
null == ptr
該程序可以編譯更快
但它仍可能被重新定義。 – ayvango
@ayvango'=='是'final',所以不,它不能。 –
最後還是不錯的。它允許優化多餘的比較,如果在左邊寫'null':'null。==(obj)' – ayvango