在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[].classRun 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 方法。
| 归档时间: |
|
| 查看次数: |
46968 次 |
| 最近记录: |