📜  数组是Java中的原始类型还是对象?

📅  最后修改于: 2022-05-13 01:55:10.172000             🧑  作者: Mango

数组是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