在java中我们可以声明一个类似的数组
String[] array = new String[10];
int size = array.length;
Run Code Online (Sandbox Code Playgroud)
这是否意味着数组本身就是一个对象?因为在C++中,数组只是一个指针而没有任何方法.
mer*_*ike 57
是; Java语言规范写道:
在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2).可以在数组上调用Object类的所有方法.
nas*_*kin 34
好吧,让我们问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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
true
Run Code Online (Sandbox Code Playgroud)
java.util.Object
(new int[1]) instanceof Object // -> evaluates to true
Run Code Online (Sandbox Code Playgroud)
java.util.Arrays
是一个辅助类,数组不是该类的实例。(new int[1]) instanceof java.util.Arrays // -> compile error
Run Code Online (Sandbox Code Playgroud)
java.lang.reflect.Array
是一个辅助类,数组不是该类的实例。(new int[1]) instanceof java.lang.reflect.Array // -> compile error
Run Code Online (Sandbox Code Playgroud)
数组继承了所有的成员java.lang.Object
clone()
数组重写从 继承的方法Object
。
数组实现了 field length
,其中包含数组的组成部分的数量。长度可以是正数或零。它是public
和final
。
数组实现接口Cloneable
和java.io.Serializable
。
8a. 数组支持Class<T>
。Class<T>
您可以从数组实例中检索实例
(new int[2]).getClass()
Run Code Online (Sandbox Code Playgroud)
或来自数组类型
int[].class
Run Code Online (Sandbox Code Playgroud)
8b. java.lang.Class<T>
为代码中的每个不同数组类型创建一个唯一的反射类实例(即 的实例)。例子
int[].class.getCanonicalName() // -> "int[]"
String[].class.getCanonicalName() // -> "java.lang.String[]" /
Run Code Online (Sandbox Code Playgroud)
参考
来自 Java 规范第 4.3.1 节“对象”
对象是类实例或数组。
类实例由类实例创建表达式显式创建。
数组是由数组创建表达式显式创建的。
数组类型的直接超类是Object
。
每个数组类型都实现接口Cloneable
和java.io.Serializable
。
数组类型的成员如下:
公共最终字段length
,其中包含数组的组成部分的数量。长度可以是正数或零。
公共方法clone
,它重写类中的同名方法Object
,并且不抛出已检查的异常。clone
数组类型的方法的返回类型T[]
是T[]
。
多维数组的克隆是浅的,也就是说它仅创建一个新数组。子数组是共享的。
所有继承自Object类的成员;Object 唯一不被继承的方法是它的clone 方法。