在java中数组是引用类型(即是对象)。对象的实际类型由创建对象时所指定的类型决定。
Object[] objects = new String[]{}; //数组实际类型为String[]
Map map = new HashMap(); //实际类型为HashMap
相同类型的数组指向同一Class对象
System.out.println(new int[1].getClass() == new int[1].getClass()); //true
System.out.println(new Integer[3].getClass() == new Integer[1].getClass()); //true
System.out.println(new int[3].getClass() == new Integer[1].getClass()); //false
数组一旦创建完毕,数组的类型就不再改变,这就意味着当进行强制类型转换时如果数组的实际类型跟转换的类型不匹配就会抛出java.lang.ClassCastException
Object[] objects = new Object[5]; //数组一旦创建完毕,数组的类型就不再改变
String[] strings = (String[]) objects; //此语句抛出ClassCastException异常
Object[] objects = new String[5]; //objects指向的数组的实际类型为String[]
String[] strings = (String[]) objects; /*转换类型与实际类型匹配,
不会抛出ClassCastException异常*/
类型匹配指满足Java中的多态要求,父类的引用指向子类的对象。