在Java中我们可以使用以下方式声明数组:
String[] array = new String[10];
int size = array.length;
这是否意味着数组本身是一个对象?我这样问是因为在C++中,数组只是一个指针,并没有任何方法。
在Java中我们可以使用以下方式声明数组:
String[] array = new String[10];
int size = array.length;
这是否意味着数组本身是一个对象?我这样问是因为在C++中,数组只是一个指针,并没有任何方法。
是的,Java语言规范写道:
在Java编程语言中,数组是对象(§4.3.1),动态创建并且可以分配给 Object 类型的变量(§4.3.2)。所有 Object 类的方法都可以在数组上调用。
好的,让我们问问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
int[] someIntegers = {42};
,得到相同的结果。 - Holger是的,它是Java中的一个对象。
还要注意的是,当你执行array.length
时,你并没有调用任何方法,只是访问数组的length
字段。在Arrays类中有很多静态方法。
需要注意的是,在Java中,数组具有独立的字节码,不与对象共享。它们虽然是对象,但在低级别上处理略有不同。
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
数组继承了java.lang.Object
的所有成员。
数组覆盖了从Object
继承而来的clone()
方法。
数组实现了包含数组组件数量的字段length
。长度可以是正数或零。它是public
和final
的。
数组实现了接口Cloneable
和java.io.Serializable
。
8a. 数组由Class<T>
支持。您可以从数组实例中检索Class<T>
实例。
(new int[2]).getClass()
int[].class
8b. 您的代码中每个不同的数组类型都会创建一个唯一的反射类实例(即 java.lang.Class<T>
的实例)。例如:
int[].class.getCanonicalName() // -> "int[]"
String[].class.getCanonicalName() // -> "java.lang.String[]" /
参考资料
来自Java规范 第4.3.1节 对象
对象是类实例或数组。
类实例由类实例创建表达式显式创建。
数组由数组创建表达式显式创建。
数组类型的直接超类是Object
。
每个数组类型都实现了接口Cloneable
和java.io.Serializable
。
数组类型的成员包括以下所有内容:
公共的 final 字段 length
,它包含数组的组件数。长度可以是正数或零。
公共的方法 clone
,它重写了类 Object
中同名方法,并且不会抛出已检查异常。数组类型 T[]
的 clone
方法的返回类型是 T[]
。
多维数组的克隆是浅层的,也就是说它只创建一个新数组。子数组是共享的。
所有从类 Object 继承的成员;唯一没有继承的 Object 方法是它的 clone 方法。
我认为答案是肯定的,尽管严格来说,在C ++中数组也是一个对象。根据当前标准(FDIS)的§1.8 [intro.object]:
对象是存储区域。
Java 中的每个数组都是一个对象,例如 int[] a=new int [2]; 所以 new 用于创建对象,由于它是一个对象,我们可以使用 a.getClass().getName() 检查类名。
System.out.println(Arrays.toString(arr))```
输出:[111 bbbb london, 131 aaaa nyc, 121 cccc jaipur]
- Ayan
&x
、p+i
和new int(42)
。 - fredoverflow