簡體   English   中英

哪個是更好的空檢查方法?

[英]Which is better way of having a null check?

我遇到了這兩種對字符串對象進行空檢查的方法。

給定一個字符串對象String str =“example”;

  1. If(str.someMethod() != null )
  2. If (null != str.someMethod())

為什么我們更喜歡第二個? 這背后的確切原因是什么,它與性能有關嗎?

在你的例子中,它與你做的完全沒有區別(除了樣式),因為Yoda檢查的原因是為了避免意外地進行任務(但是繼續閱讀為什么這在Java中無關緊要),你可以' t分配調用方法的結果。

關於Java的一個好處是,即使您正在測試str ,例如:

if (str == null)

if (null == str)

仍然沒有區別,而在某些語言中使用B語言(例如C,C ++,D,JavaScript等),人們會做第二次(“尤達測試”)以最小化這種情況BUG:

if (str = null)          // Not an issue in Java

例如,在C或JavaScript中,將為str 分配 null ,然后計算結果,將其強制轉換為boolean,而不是分支。 但在Java中,這是編譯器告訴你的語法錯誤。

Java沒有進行那種布爾轉換,所以在Java中使用Yoda檢查的唯一原因是你是在測試布爾值,ec

boolean flag;
// ...
if (flag == false)

在那里 ,你可能會想到這是偶然的:

if (flag = false)

但是因為使用帶有布爾值的==!=是完全沒必要的(你只需使用if (flag)if (!flag) ),在現實世界中你根本不需要用Java進行Yoda檢查。

這並不意味着人們仍然不會使用它們,這是他們個人風格的問題。 在Java中,沒有客觀的理由。

它在性能方面沒有任何區別,但是當談到編程技能的世界時, Yoda編程模式有一些優勢。

在您的示例中,這兩個案例都會拋出NullPointerException (因為您正在調用null實例引用的someMethod`)並不重要。

但是,假設您要檢查str是否為null。 在第一種情況下,您將編寫if (str == null)並在第二種if (null == str)編寫。 兩者都是一樣的。 現在說你意外地使用=而不是== 在Java中,沒關系,因為編譯器不會讓你因為表達式沒有評估布爾值。 但是其他語言可以讓你這樣做,更具體地說是沒有編譯器的語言,只使用一個interperter。 在這種情況下,如果您編寫if (str = null)您將為字符串賦值null並覆蓋其當前值,這將導致錯誤的行為並且您在尾巴上追逐很長一段時間。 但是,如果您編寫if (null = str) ,則會收到錯誤消息,指出您無法將值分配給null ,從而節省了大量的時間和精力。 同樣,這與JAVA無關。

可能與Java相關的示例是對常量值使用方法調用。 例如, if (str.equals("constantString") 。如果strnull你將得到一個NullPointerException。但是,如果你使用Yoad模式並寫if ("constantString".equals(str))你會得到false因為ConstantString不等於null 。這當然只與比較相關,而不是說contains等。

暫無
暫無

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

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