我只是想知道何时使用 != null
而不是 instanceof
来检查某些内容是否为 null 是否有充分的理由或实践。
使用 instanceof
测试某些内容是否为 null 是一种不好的做法吗?
例如:
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
(但是,即使类型转换成功,您也应该三思是否真的要接受null
)
关于java - 为什么或为什么不使用instanceof来检查是否不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30125548/