java - 为什么或为什么不使用instanceof来检查是否不为空

标签 java android

我只是想知道何时使用 != 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/

相关文章:

android - 在 Android ICS x86 上构建 fastdroid-vnc 时出现问题

java - 覆盖指定类中的方法

java - 基本正则表达式替换

java - 对于大量查询,jdbcTemplate.batchUpdate() 出现问题

android - google play 警告添加权限 'android.permission.READ_CALL_LOG'

android - 需要一个安卓推送框架

android - 上传AAB时代码验证错误: "Files added after transparency metadata generation"

java - 监控Java应用程序的API指标

java - 如何删除窗口调整大小时的黑色矩形?

java - 需要在java文件夹中获取日志文件