【问题标题】:Java Array objects returns array's type instead of ArrayJava Array 对象返回数组的类型而不是 Array
【发布时间】:2013-06-04 19:56:51
【问题描述】:

在寻求帮助之前,如果这是一个重复的问题或不好的问题,我真的很抱歉,因为我不知道要搜索什么。

在使用 java 中的数组时,有一件事情困扰着我。 这是代码:

String []stt = new String[5];
stt[0].length();  //of course NullPointerException because uninitialized.
System.out.println(stt.getClass()); //it should return class of array instead of String.

根据上面的代码,到目前为止还没有创建String对象,stt应该是Array类型而不是String类型,实际上stt里面的元素应该是String类型。

我想知道数组对象的类是什么,它应该返回数组对象的类。

【问题讨论】:

标签: java arrays nullpointerexception primitive


【解决方案1】:

引用所指向的类是一个字符串数组。如果您想测试该引用是否是数组的一部分,那么有一个特殊的方法,isArray

System.out.println(stt.getClass().isArray());

正如其他人所指出的,仔细观察,您可以看到仅使用输出的差异

class [Ljava.lang.String; // Array of String
class java.lang.String    // String

【讨论】:

  • String 类怎么和 Array 相关联????我们可以制作任何类的对象的数组,它们是如何与 java.lang.reflect.Array 关联的。看起来所有的类都继承了 Array,就像 Object 一样。
【解决方案2】:

运行此代码:

String []stt = new String[5];
System.out.println(stt.getClass());

打印

class [Ljava.lang.String;
      ^^

开头的[L表示Array,其余的显然是String。合:字符串数组。

【讨论】:

    【解决方案3】:

    Java 中的数组不是单独的类型。所以Strings 数组的类仍然是StringArray 类只是处理数组的静态方法的集合,您不能创建它的实例。正如其他答案中所指出的,您可以使用Class 中的isArray 方法来确定对象是否为数组。

    【讨论】:

      【解决方案4】:

      或者,您可以使用instanceof

      boolean isStringArray(Object o){
      return o instanceof String[];
      }
      

      【讨论】:

      • 编码不好,为什么不使用?返回 o instanceof String[]
      【解决方案5】:

      语句System.out.println( stt.getClass() ); 实际上返回一个数组。如果你仔细观察,输出是class [Ljava.lang.String;,而不是class java.lang.String[ 表示 Array 的表示。

      要检查输出是否为数组,您可以尝试语句stt.getClass().isArray(),它返回boolean

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-01
        • 2015-08-29
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        相关资源
        最近更新 更多