使用以下内容之间是否存在偏好或行为差异:
if(obj.getClass().isArray()) {} 和
if(obj instanceof Object[]) {} ?
在大多数情况下,应使用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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。