![](/img/trans.png)
[英]Why does the equals() implementation generated by Eclipse check for null before type checking (instanceof)?
[英]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
作为类型转换也将在x
为null
时成功执行(但是,即使类型转换成功,您也应该三思而行是否真的要接受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.