开发者社区> 问答> 正文

Java数组反射:isArray与instanceof

使用以下内容之间是否存在偏好或行为差异:

if(obj.getClass().isArray()) {} 和

if(obj instanceof Object[]) {} ?

展开
收起
保持可爱mmm 2020-01-16 17:49:30 1070 0
1 条回答
写回答
取消 提交回答
  • 在大多数情况下,应使用instanceof运算符测试对象是否为数组。

    通常,您需要先测试对象的类型,然后再向下转换为编译时已知的特定类型。例如,也许您编写了一些可以使用Integer[]或的代码int[]。您想使用以下方法保护自己的演员instanceof:

    if (obj instanceof Integer[]) { Integer[] array = (Integer[]) obj; /* Use the boxed array / } else if (obj instanceof int[]) { int[] array = (int[]) obj; / Use the primitive array */ } else ... 在JVM级别,instanceof操作员将转换为特定的“ instanceof”字节代码,该代码在大多数JVM实现中都得到了优化。

    在极少数情况下,您可能会使用反射遍历未知类型的对象图。在这种情况下,该isArray()方法可能会有所帮助,因为您在编译时不知道组件类型。例如,您可能正在实现某种序列化机制,并且能够将数组的每个组件传递给相同的序列化方法,而不论其类型如何。

    有两种特殊情况:空引用和对原始数组的引用。

    空引用将导致instanceof结果false,而isArray引发NullPointerException。

    施加到一个原始阵列,所述instanceof产量false除非在右边的操作数完全相同的组件类型的组件类型相匹配。相反,isArray()将返回true任何组件类型 问题来源于stack overflow

    2020-01-16 17:49:43
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载