int[] a1=new int[]{2,3,4};
int[] a2=new int[4];
int[][] a3=new int[2][3];
String[] A4=new String[]{"abc","bcd","cdf"}
//运行结果为true,具有相同的维数和元素的类型属于统一的字节码
System.out.println(a1.getClass()==a2.getClass());
//结果为false,虽然数组的元素的类型相同但是a1是一维数组a2是二维数组,
System.out.println(a1.getClass()==a3.getClass());
//结果为false,a1和a2两个数组都是一维数组,但是a1是整数数组,a2是字符串数组,
System.out.println(a1.getClass()==a4.getClass());
//结果为true, a1整数数组和a2字符串数组的父类都是Object
System.out.println(a1.getClass().getSuperclass().getName()==a4.getClass().getSuperclass().getName()));
//
Object obj1=a1;//正常,基本类型的一维数组可以被Object类型使用
Object[] onj11=a1//编译错误;基本类型的一维数组不当着Object[]类型使用,
//下面两句运行正常, 因为非基本类型的一维数组可以当做Object使用也可以当做Object[]使用,
Object obj3=a4;
Object[] obj12=a4;
//下面两句运行正常,任何二位数组可以当做Object使用, 也可以当做Object[]使用,因为二维数组的元素是个一维数组,Object是数组的父类
Object obj4=a3;
Object[] obj11=a3;
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a4));
运行的结果[[I@de6ced]
[a, b, c]
因为在jDk1.4版本asList()方法接受的是一个Object[]类型,a4是字符串数组类型,可以被转换成Object[]类型,所有就会a4的数组中所有的元素存入List集合中。a1的整数数组,不能转为Object[]类型,只能转成Object类型,所有就不会去找jdk1.4版本运行, 就会去找jdk1.5,但是1.5版本asList接收的是可变参数,这时会把a1的整数数组当做一个元素存入在list集合中,
数组的反射
public class ReflectTest {
public static void main(String[] args)
{
Object[] a4= new Object[]{"abc",4,true}
printObject(a4)
}
public static void printObject(Object obj)
{
Class clazz=obj.getClass();
//判断传进来的参数类型是不是数组类型
if(clazz.isArray())
{
得到数组的个数
int len= Array.getLength(obj);
//clazz.getClass.getName在这里无法得到数组中的元素类型,
for(int x=0;x<len;x++)
{
//获取数组中的每一个元素
System.out.println(Array.get(obj, x));
//可以得到数组中某一个具体的元素的类型
System.out.println( Array.get(obj, x).getClass().getName());
}
} else
{
System.out.println(obj);
}
}
运行的结果为
abc
java.lang.String
4
java.lang.Integer
true
java.lang.Boolean
|