是Java中的数组一个对象

问题描述 投票:90回答:10

在Java中,我们可以声明一个数组,如

String[] array = new String[10]; 
int size = array.length; 

这是否意味着数组本身是一个对象?因为在C ++中,数组只是一个指针,没有任何方法。

java
10个回答
188
投票

Java语言规范section 4.3.1开始于:

对象是类实例或数组。


0
投票
观察下面的代码片段和输出。

57
投票

是; Java语言规范writes

在Java编程语言中,数组是对象(第4.3.1节),是动态创建的,并且可以分配给对象类型(第4.3.2节)的变量。 Object类的所有方法都可以在数组上调用。


33
投票

好,让我们问一下Java!

public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println(args instanceof Object);
    int[] someIntegers = new int[] {42};
    System.out.println(someIntegers instanceof Object);
  }
}

输出:

true
true

7
投票

是,它是Java中的对象。

还请注意,当您执行array.length时,您不会调用任何方法,而只是访问数组的length字段。 Arrays类中有很多静态方法。


3
投票

值得注意的是,Java中的数组具有自己的字节码,它们不与对象共享。它们当然是对象,但在底层上的处理略有不同。


2
投票

我会说答案是肯定的,尽管严格地说,我可以补充一点,数组也是C ++中的对象。从当前标准(FDIS)的§1.8[介绍对象]:

[是存储区域。


2
投票
我只想添加数组在反射API中具有表示形式-java.lang.reflect.Array

1
投票
java中的每个数组都是一个对象ex int [] a = new int [2];所以new用于创建对象,因为它是一个对象,所以我们可以使用a.getClass()。getName();检查类名称。

1
投票
    数组不是类树中列出的任何类的实例,但是每个数组都是一个对象,并且直接继承自java.util.Object
  • (new int[1]) instanceof Object // -> evaluates to true
      java.util.Arrays类是一个辅助类,数组不是该类的实例。
  • (new int[1]) instanceof java.util.Arrays // -> compile error
      java.lang.reflect.Array类是一个辅助类,数组不是该类的实例。
  • (new int[1]) instanceof java.lang.reflect.Array // -> compile error
    1. 数组继承java.lang.Object]的所有成员

    2. 数组会覆盖从clone()继承的方法Object
    3. 数组实现字段length,其中包含数组的组件数。长度可以是正数或零。它是publicfinal
    4. 数组实现接口Cloneablejava.io.Serializable
  • 8a上。 Class<T>支持数组。您可以从数组实例中检索Class<T>实例

    Class<T>

    或来自数组类型

    (new int[2]).getClass()

    8b中。为代码中的每个不同数组类型创建一个唯一的反射类实例(即int[].class的实例)。实施例

    java.lang.Class<T>

      要重复:数组是对象,但不是类树中任何类的实例。

  • 参考文献

    根据Java规范int[].class.getCanonicalName() // -> "int[]" String[].class.getCanonicalName() // -> "java.lang.String[]" /

    • 对象是类实例或数组。

    • 类实例是由类实例创建表达式显式创建的。

    • 数组是由数组创建表达式显式创建的。

    • 来自Section 4.3.1 Objects

    • 此类包含用于操纵数组的各种方法(例如排序和搜索)
    • 来自java.util.Arrays

    • 数组类型的直接超类是Section 10.1 Objects

    • 每个数组类型都实现接口ObjectCloneable

    • 来自java.io.Serializable

    数组类型的成员都是以下所有:

    • 最终公共字段Section 10.7 Array Members,其中包含数组的组件数。长度可以是正数或零。

    • 公用方法length,它重写类clone中相同名称的方法,并且不引发任何检查的异常。数组类型为Objectclone方法的返回类型为T[]

    • 多维数组的克隆很浅,也就是说,它仅创建一个新数组。子数组是共享的。

    • 所有从类Object继承的成员;不继承的对象的唯一方法是其克隆方法。

  • © www.soinside.com 2019 - 2024. All rights reserved.