2013-02-13 81 views
4

在java中檢查非空值的最佳方法是什麼?Java string null檢查!= null或!str.equals(null)?

String query ="abcd"; 

query != null VS !query.equals(null).

哪個更好?爲什麼?

+0

.equals默認爲,只要它沒有明確覆蓋。 – 2013-02-13 21:07:11

+0

== @JaynathanLeung。你說的是'String'對象呢? – 2013-02-13 21:08:07

+0

@RohitJain是否有任何類型的'字符串'不是對象嗎?就我所知,沒有什麼原始的等價物... – 2013-02-13 21:10:09

回答

24

1日一個更好(和唯一的選擇),因爲第二屆一個將拋出NPE,當你的價值實際上是null就這麼簡單。

嘗試了這一點:

String str = null; 
str.equals(null); // will throw `NPE`. 

因此,基本上,你要執行本身的測試觸發第二個情況下NullPointerException。所以,這是沒有選擇的。

+5

NPE =對於那些不知道縮寫詞的人來說是NullPointerException – 2013-02-13 21:08:44

+0

這是錯誤的.'String.equals'不會拋出NPE。因爲它檢查'instanceof',它不會拋出'null'異常' – Cratylus 2013-02-13 21:09:32

+0

「更好」在這裏是一個極端的輕描淡寫,其次是沒有做到你所期望的。 – djechlin 2013-02-13 21:11:02

2

query != null好像!query.equals(null)會在查詢實際上爲空時拋出異常。此外query != null易讀

11

!str.equals(null)

  1. 總是返回false,如果它不拋出一個異常,並
  2. 拋出一個異常,如果str爲null

空的點檢查是爲了確保在此代碼str中的引用實際上是指對象。如果它爲空,則不能調用上的任何方法,包括equals,而不會拋出NullPointerException ...其中空值檢查的目的是爲了避免發生。

因此!str.equals(null)導致非常問題的空檢查是爲了防止和根本不做你的想法。永遠不要這樣做。

+0

+1,我對'str.equals(null)'提出了相同的觀點總是會返回false,但我的回答並不清楚具體情況題.. :) – PermGenError 2013-02-13 21:11:17

2

query != null比較對象是否爲nullquery.equals("something")比較該對象內部的值。 string == "something」。所以在這種情況下使用query != null