簡體   English   中英

為什么或為什么不使用instanceof檢查是否不為null

[英]Why or why not use instanceof to check if not null

我只是想知道何時使用!= null而不是instanceof來檢查某項是否為null是否有充分的理由或做法。

測試instanceof是否為空是一種不好的做法嗎?

例如:

View view = ((Activity) context).findViewById(viewID);
                                if (view instanceof  View) {
                                    listener.onView(view, viewID);
                                }

要么

View view = ((Activity) context).findViewById(viewID);
                            if (view != null) {
                                listener.onView(view, viewID);
                            }

它不應該一樣工作嗎?

這取決於您實際檢查的內容

  • 如果您只想知道引用是否為null ,請使用x == null ,不要使用其他任何東西
  • 如果您想知道特定的引用是否不為null並指向Foo類型的實例,則可以使用x instanceof Foo因為它暗示不為null

    但是,如果引用的編譯時類型已經是Foo ,你就知道該實例類型的Foo時它非null ,因此第一顆子彈適用於這種情況; 您只想測試null 在您更新的問題的示例中就是這種情況,引用已經具有編譯時類型View

  • 如果您想知道類型轉換(Foo)x是否會成功,可以使用x == null || x instanceof Foo x == null || x instanceof Foo作為類型轉換也將在xnull時成功執行(但是,即使類型轉換成功,您也應該三思而行是否真的要接受null

instanceof之前根本不需要空檢查。 如果為null,則在instanceof檢查期間將返回false。

測試instanceof是否為空是一種不好的做法嗎?

在運行時,如果您不確定它是否可以為null,則只需使用instanceof即可,如果為null,則返回false。

我只是想知道何時使用!= null而不是instanceof來檢查某項是否為null是否有充分的理由或做法。

當然,有一個原因, !=null可以應用於Java中的所有對象,但是instanceof不能應用於Primitive類型,它僅檢查給定對象是否是類的實例,這就是為什么我們將!=null應用於檢查是否為空。

測試instanceof是否為空是一種不好的做法嗎?

您可以使用它,但是如果它可能導致原始類型出現問題並且如果!=null可以應用於所有對象,那么為什么要使用instanceof呢?

編輯:

在您的情況下,使用if (view instanceof View)更為安全,因為您正在使用它來測試它是否是View的實例,同時還要測試它是否不是null

正如您在“ 此處 ”中看到的那樣,您可以看到可以使用instanceof檢查是否為空。

instanceof指令用於檢查對象是否是某個類的實例。

因此,使用它來檢查空值根本沒有任何意義...


在代碼段中,您正在檢查兩個不同的內容:

  • 在第一個中,您正在檢查對象是否為View類的實例
  • 在第二個中,您正在檢查對象是否已初始化

所以他們不是做同一件事的兩種方式...

看看: 在Java中使用“實例”

暫無
暫無

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

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