数组是Java中的原始类型还是对象?
Java中的数组是一个对象。现在的问题是这怎么可能?这背后的原因是什么?在Java中,我们可以使用 new运算符创建数组,并且我们知道每个对象都是使用 new运算符创建的。因此我们可以说数组也是一个对象。现在问题也来了,每次我们为一个类创建一个对象,那么数组的类是什么?
- 在Java中,每个数组类型都有一个类,因此 int[] 有一个类,float、double 等也有一个类。
- 数组类型的直接超类是 Object。每个数组类型都实现了接口 Cloneable 和Java.io.Serializable。
- 在Java编程语言中,数组是对象(第 4.3.1 节),是动态创建的,并且可以分配给 Object 类型的变量(第 4.3.2 节)。 Object 类的所有方法都可以在数组上调用。
对于每种数组类型,都有相应的类可用,这些类是Java语言的一部分,程序员级别不可用。要知道任何数组的类,我们可以采用以下方法:
// Here x is the name of the array.
System.out.println(x.getClass().getName());
// Java program to display class of
// int array type
public class Test
{
public static void main(String[] args)
{
int[] x = new int[3];
System.out.println(x.getClass().getName());
}
}
输出:
[I
注意: [I 这是这个数组的类,一个 [(方括号)因为它是一维的,而 I 是整数数据类型。
这是为某些数组类型指定相应类名的表:-
Array type Corresponding class Name
int[] [I
int[][] [[I
double[] [D
double[][] [[D
short[] [S
byte[] [B
boolean[] [Z
在Java编程语言中,数组是动态创建的对象,可以分配给 Object 类型的变量。 Object 类的所有方法都可以在数组上调用。
// Java program to check the class of
// int array type
public class Test {
public static void main(String[] args)
{
// Object is the parent class of all classes
// of Java. Here args is the object of String
// class.
System.out.println(args instanceof Object);
int[] arr = new int[2];
// Here arr is also an object of int class.
System.out.println(arr instanceof Object);
}
}
输出:
true
true
参考: https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html