A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李文富 于 2012-6-7 18:58 编辑

数组反射是遇到的问题,向大家请教

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class ReflectTest {
       /**
        * @param args
        * @throws ClassNotFoundException
        * @throws SecurityException
        * @throws NoSuchMethodException
        */
       public static void main(String[] args) throws Exception {
           int[] a1 = new int[]{1,2,3};
           int[] a2 = new int[4];
           int[][] a3 = new int[2][3];
           String [] a4 = new String[]{"a","b","c"};
           System.out.println(a1.getClass() == a2.getClass());
           //System.out.println(a1.getClass() == a3.getClass());此处在eclipese中直接报错 ;张老师说过比较Class可以直接使用 == ,而为什么该处不可????
           System.out.println(a1.getClass().equals(a4.getClass()));
           System.out.println(a1.getClass().equals(a3.getClass()));
           System.out.println(a1.getClass().getName());
           System.out.println(a1.getClass().getSuperclass().getName());
           System.out.println(a1.getClass().getSuperclass().getName());
           
           Object aObj1 = a1;
           Object aObj2 = a4;
           //Object[] aObj3 = a1;
           Object[] aObj4 = a3;
           Object[] aObj5 = a4;
           
           System.out.println(a1);//打印出来的都是hashcode
           System.out.println(a3);//打印出来的都是hashcode
           System.out.println(a4);//打印出来的都是hashcode
           
           System.out.println(Arrays.asList(a1));//打印仍然是hashcode
           System.out.println(Arrays.asList(a4));//字符串可以打印
           
           Object obj = a4;
           printObject(obj);
           printObject(a1);
           //不能获取整个数组的元素类型;但可以得到某个元素的类型; a[0].getClass().getName();
       }
       private static void printObject(Object obj) {
              // TODO Auto-generated method stub
              Class clazz  = obj.getClass();
              if(clazz.isArray()){
                     int len = Array.getLength(obj);
                     for(int i=0; i<len; i++){
                            System.out.println(Array.get(obj,i));
                     }
              }else{
                     System.out.println(obj);
              }
       }
}

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 吴小铁你好 于 2012-6-6 20:11 编辑

a1是一位数组,a3为二维数组数组含,数组类型不一样不能用==比较。楼主可以把该句改为改为:
  1. System.out.println(a1.getClass() == (Object)a3.getClass());
复制代码
回复 使用道具 举报
可能是版本问题,老师用的是myeclipse。所以建议还是用equals方法来比就不会报错了。
回复 使用道具 举报
类型都不一样,怎么比,要比就需要一维数组和一维数组比,二维数组和二维数组比。视屏上有解释的
回复 使用道具 举报
吴小铁你好 发表于 2012-6-6 20:09
a1是一位数组,a3为二维数组数组含,数组类型不一样不能用==比较。楼主可以把该句改为改为: ...

有点疑问:
Object是所有类的父类,也就是说a3的字节码对象应该本来就是Object类型啊,为什么还要强转呀?
回复 使用道具 举报
吴小铁你好 发表于 2012-6-6 20:09
a1是一位数组,a3为二维数组数组含,数组类型不一样不能用==比较。楼主可以把该句改为改为: ...

有点疑问:
Object是所有类的父类,也就是说a3的字节码对象应该本来就是Object类型啊,为什么还要强转呀?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马