[英]Which is better way of having a null check?
我遇到了這兩種對字符串對象進行空檢查的方法。
給定一個字符串對象String str =“example”;
If(str.someMethod() != null )
或 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")
。如果str
為null
你將得到一個NullPointerException。但是,如果你使用Yoad模式並寫if ("constantString".equals(str))
你會得到false
因為ConstantString
不等於null
。這當然只與比較相關,而不是說contains
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.