繁体   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