簡體   English   中英

NullPointer異常處理

[英]NullPointer Exception handling

我一直在瀏覽一些網站,他們談論如何預防NPE。 在那里我看到有人說使用null != object但我不明白為什么。 在Java中執行以下操作有什么區別?

if(null != object) 

VS

if(object != null)

兩者在效果上沒有區別。

但是,有一種思路是建議在操作員的左側使用不可分配的(常量)值。 因為這樣可以減少意外分配的風險(這是從C編譯器未對其進行警告的時間開始的)。

// this is dangerous when misstyped
if (object = null) {

然而,首先寫空值確實可以減少錯誤輸入的影響的論點非常微弱。 特別是當不使用“ ==”而是“!=”或“ <”時。 所以我想說,忽略那些建議。

但是,在某些情況下,訂購有助於預防NPE:

if ("string".equals(object))

在這種情況下,當“ object”為null時,您不會獲得NPE。

在Java中執行以下操作有什么區別?

  • 在代碼含義上沒有區別。

  • 在代碼安全性/魯棒性方面沒有區別。

在某些語言中, if (null == object)模式有助於避免此錯誤:

 if (object = null)

...這會意外破壞object變量的值。

但是在Java中, if語句需要條件表達式,其類型為boolean ,而object == null的類型不是布爾值。 因此,可以確保特定的錯誤/錯字會導致編譯錯誤。


離題...

您可能在經典Java中遇到'=='而不是'='的情況是:

 if (flag == true)

要么

 if (flag == false)

但是,沒有經驗豐富的Java程序員會寫那個。 相反,他們會寫:

 if (flag)

 if (!flag)

在Java 5及更高版本中, Boolean自動裝箱會給您帶來麻煩。 但是,在這種情況下,您所做的事情無論如何都是不明智的。 考慮一下:

 Boolean TRUE = true;
 Boolean TOO_TRUE = new Boolean(true);  // generates a new instance ...

 if (TRUE == TOO_TRUE) {  // should be TRUE.equals(TRUE)
     ....
 }

再次,有經驗的程序員將避免不必要地使用裝箱的類型,並避免使用==對其進行測試。 此外,您可能會從IDE或從靜態分析器(如FindBugs或PMD)獲得此警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM