- 具有相同维度和元素类型的数组属于同一个类型,即具有相同的Class实例对象。
- 注意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);
}