Java中的数组是对象吗?

来自Wikioe
跳到导航 跳到搜索


Java中的数组是对象?


是!

package com.eijux;

public class Test {
	public static void main(String[] args) {

		// 数组是对象吗?

		System.out.println("-----------基本数据类型数组的类型-------------");
		System.out.println(new int[2].getClass().getName());
		System.out.println(new short[2].getClass().getName());
		System.out.println(new long[2].getClass().getName());
		System.out.println(new byte[2].getClass().getName());
		System.out.println(new float[2].getClass().getName());
		System.out.println(new double[2].getClass().getName());
		System.out.println(new char[2].getClass().getName());
		System.out.println(new boolean[2].getClass().getName());
		
		System.out.println("-----------基本数据类型包装类数组的类型-------------");
		System.out.println(new Integer[3].getClass().getName());
		System.out.println(new Short[3].getClass().getName());
		System.out.println(new Long[3].getClass().getName());
		System.out.println(new Byte[3].getClass().getName());
		System.out.println(new Float[3].getClass().getName());
		System.out.println(new Double[3].getClass().getName());
		System.out.println(new Character[3].getClass().getName());
		System.out.println(new Boolean[3].getClass().getName());
		
		System.out.println("-----------对象数组的类型-------------");	
		System.out.println(new Object[4].getClass().getName());
		System.out.println(new String[4].getClass().getName());
		System.out.println(new Student[4].getClass().getName());
		
		System.out.println("-----------二维数组的类型-------------");	
		System.out.println(new int[5][6].getClass().getName());
		System.out.println(new Integer[5][6].getClass().getName());
		System.out.println(new String[5][6].getClass().getName());
		System.out.println(new Student[5][6].getClass().getName());
	}
}

其输出内容为:

-----------基本数据类型数组的类型-------------
[I
[S
[J
[B
[F
[D
[C
[Z
-----------基本数据类型包装类数组的类型-------------
[Ljava.lang.Integer;
[Ljava.lang.Short;
[Ljava.lang.Long;
[Ljava.lang.Byte;
[Ljava.lang.Float;
[Ljava.lang.Double;
[Ljava.lang.Character;
[Ljava.lang.Boolean;
-----------对象数组的类型-------------
[Ljava.lang.Object;
[Ljava.lang.String;
[Lcom.eijux.Student;
-----------二维数组的类型-------------
[[I
[[Ljava.lang.Integer;
[[Ljava.lang.String;
[[Lcom.eijux.Student;

可以看出,数组也是有类型的。只是这个类型显得比较奇怪,既不是Java标准库中的类,也不是自定义的类,
而是虚拟机自动创建了数组类型,这种类型的命名规则是这样的:

  1. 每一维度用一个“[”表示;(开头两个“[”,就代表是二维数组)
  2. “[”后面是数组中元素的类型(包括基本数据类型和引用数据类型)
    基本类型:Integer(I)、Short(S)、Long(J)、Byte(B)、Float(F)、Double(D)、Character(C)、Boolean(Z)
    对象:“L类名;