关于数组的反射

来源:互联网 发布:淘宝一千零一夜视频 编辑:程序博客网 时间:2024/05/19 09:41
  1. 具有相同维度和元素类型的数组属于同一个类型,即具有相同的Class实例对象。
  2. 注意JDK5.0之后,不可以把一位数组(基本类型)的字节码和与其类型不兼容的数组类型的字节码用“==”进行比较,这样比较连编译器都不可能通过

int[]a1 = new int[]{1,2,3};//有一个数组,里面装的int,他不是Object

int[]a2 = new int[7];

int[][]a3 = new int[][]{{1,2},{3,4}};//吧a3当做一个数组来看待,它里面装的就是int类型的数组,也就是Object。

String[][]a4 = newString[][]{{"a","b","c"},{"d","e","f"}};//有一个数组,里面装的是String,String也是Object。

Integer[]a5 = new Integer[]{1,2,3};

System.out.println(a1.getClass()==a2.getClass());

System.out.println(a1.getClass().equals(a3.getClass()));

System.out.println(a2.getClass().equals(a4.getClass()));

System.out.println(a2.getClass().getName());

System.out.println(a1.getClass().getSuperclass().getName());

System.out.println(a3.getClass().getSuperclass().getName());

/*

 * a1是个一维数组,其每一个元素都是一个int类型,

 * a3是一个二维数组,a3的每一个元素就是一个一维数组,就是一个Object

 *a2是个一维数组,其每一个元素都是一个int类型,根据我的扒皮原理,把Object[]的中括号扒掉后

 * 就是说a2的每个元素都是

 *

 */

ObjectaObj1 = a1;

Object[]aObj2 = a3;

//Object[]aObj3 = a2;

Object[][]aObj4 = a4;

/*

 *这里需要强调的是这个asList方法,在jdk4的时候asList的参数为Object[] a,

 * 看成是Object的数组,把里面的元素转换为一个list,并且把里面的3个元素也显示了,

 *在jdk5以后,如果传进来的是元素为原始类型的一维数组,只是单纯把这个对象转换成list对象,

 * 而不会转换过来。打个比方,这个方法就是说会把传进来的这个Object[]把外面的皮扒掉,如果里面是个字符串

 *或者Integer这样的封装类,也就说正宗的Object类,他就会显示这个字符串,传进来这个参数(数组类型)每一个元素

 * 如果他扒开衣服一看,里面是一个原始类型(intdouble等)或者还是一个数组,那么他只会单纯的返回这个list,

 * 里面的元素不会转换,只会返回这个数组的类型,和hashcode。

 *

 *

 */

System.out.println(Arrays.asList(a1));

System.out.println(a1);

System.out.println(Arrays.asList(a4));

System.out.println(Arrays.asList(a3));

System.out.println(Arrays.asList(aObj4));

System.out.println(Arrays.asList(a5));

 

//打印任意Object类型的对象

privatestatic void printObj(Object obj) {

Classclazz = obj.getClass();

if(clazz.isArray()) {

intlen = Array.getLength(obj);

for(int i=0;i<len;i++) {

System.out.println(Array.get(obj,i));

}

}else

System.out.println(obj);

}

原创粉丝点击