当前位置: 首页 > 面试题库 >

Java数组反射:isArray与instanceof

杨腾
2023-03-14
问题内容

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

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操作员将转换为特定的“实例”字节代码,该代码在大多数JVM实现中都得到了优化。

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

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

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

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



 类似资料:
  • 检查给定的参数是否是一个数组。 使用 Array.isArray() 来检查一个值是否为一个数组。 const isArray = val => Array.isArray(val); isArray([1]); // true

  • 问题内容: 如何在Java中通过反射找到多维数组的长度? 问题答案: Java数组的每个实例都有长度,并非同一维的所有数组都必须具有相等的长度。也就是说,您可以在中获取实例的长度。 尺寸可以用名称中的[[]数来计数,这比降级类型层次结构要快。如下代码: 给出以下输出:

  • 本文向大家介绍Java使用反射操作数组示例,包括了Java使用反射操作数组示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java使用反射操作数组。分享给大家供大家参考,具体如下: 一 实战 1 代码 2 运行 E:\Java\疯狂java讲义\codes\18\18.4>java ArrayTest1 疯狂Java讲义 轻量级Java EE企业应用实战 二 实战 1 代码 2 运行

  • 熟悉Java的同学肯定对Java的反射能力记忆犹新,同样的,Rust也提供了运行时反射的能力。但是,这里有点小小的不同,因为 Rust 不带 VM 不带 Runtime ,因此,其提供的反射更像是一种编译时反射。 因为,Rust只能对 'static 生命周期的变量(常量)进行反射! 举个例子 我们会有这样的需求,去某些路径里加载配置文件。我们可能提供一个配置文件路径,好吧,这是个字符串(Stri

  • IsArray函数返回一个布尔值,指示指定的输入变量是否是数组变量。 语法 (Syntax) IsArray(variablename) 例子 (Example) 添加按钮并添加以下功能。 Private Sub Constant_demo_Click() Dim a,b as Variant a = array("Red","Blue","Yellow") b = "1234

  • 问题内容: 运行以下代码: 我得到了错误: 为什么是这样? 问题答案: 构造函数类的newInstance()方法采用一个对象数组。数组中的每个项目都是您要调用的构造函数的参数。您的类的构造函数需要一个对象数组,因此您需要在传递给新实例方法的数组内有一个对象数组