對於下面的條件語句:如果(A = NULL &&一個的instanceof一個!)...或者,如果(一個的instanceof A)
if (a != null && a instanceof A)
或
if (a instanceof A)
有什麼好處(對例如,性能方面)首先檢查null
?結果兩個條件應該是相等的。
對於下面的條件語句:如果(A = NULL &&一個的instanceof一個!)...或者,如果(一個的instanceof A)
if (a != null && a instanceof A)
或
if (a instanceof A)
有什麼好處(對例如,性能方面)首先檢查null
?結果兩個條件應該是相等的。
沒有優勢無論如何,你可以做
if(a instanceof A) {}
這將
回報
評估爲假,如果是null
我嚴重懷疑有先檢查空任何好處。這取決於虛擬機如何實現實例檢查......可能性是否將自身作爲代碼的第一部分。
if(a instanceof A)
就夠了。
if(a!=null && expr)
模式用於當expr
將拋出NullPointerException
如果a
爲空。如果a
爲空,則a instanceof A
不拋出NPE並且僅返回false
。
JVM必須檢查null本身。沒有太多的意義在做兩次。
instanceOf操作符不需要顯式空值檢查,因爲如果操作數爲null,它不會拋出空指針異常。
在運行時,如果關係表達式的值不爲空,並且引用可以轉換爲引用類型而不引發類轉換異常,則instanceOf運算符的結果爲true。
如果操作數爲null,則instanceOf運算符返回false,因此不需要顯式空值檢查。
考慮下面的例子,
public static void main(String[] args) {
if(a != null && a instanceof ArrayList){ //Violation
System.out.println("In if block");
}
else
{
System.out.println("In else block");
}
}
如下圖所示}這種的正確用法,
public static void main(String[] args) {
if(a instanceof ArrayList){ //Correct way
System.out.println("In if block");
}
else
{
System.out.println("In else block");
}
}
1 JLS:在運行時,instanceof運算符的結果是,如果真RelationalExpression的值不爲null,並且可以將引用強制轉換爲ReferenceType(§15.16)而不引發ClassCastException。否則結果是錯誤的。 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#80289 – barrowc 2010-07-25 05:29:32
@barrowc pin指向點! – naikus 2010-07-25 05:40:26
自1997年以來,我一直在編程Java,這對我來說是新聞。謝謝,+1! – 2010-07-25 06:16:13