黑马程序员技术交流社区

标题: 〈已解决〉关于反射比较Class类用equals 和 == 来比较的问题 [打印本页]

作者: 李文富    时间: 2012-6-6 19:47
标题: 〈已解决〉关于反射比较Class类用equals 和 == 来比较的问题
本帖最后由 李文富 于 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);
              }
       }
}


作者: 吴小铁你好    时间: 2012-6-6 20:09
本帖最后由 吴小铁你好 于 2012-6-6 20:11 编辑

a1是一位数组,a3为二维数组数组含,数组类型不一样不能用==比较。楼主可以把该句改为改为:
  1. System.out.println(a1.getClass() == (Object)a3.getClass());
复制代码

作者: 付信榕    时间: 2012-6-7 14:54
可能是版本问题,老师用的是myeclipse。所以建议还是用equals方法来比就不会报错了。
作者: 李海晓    时间: 2012-6-7 17:22
类型都不一样,怎么比,要比就需要一维数组和一维数组比,二维数组和二维数组比。视屏上有解释的
作者: 赵玮_Tom    时间: 2012-6-10 20:40
吴小铁你好 发表于 2012-6-6 20:09
a1是一位数组,a3为二维数组数组含,数组类型不一样不能用==比较。楼主可以把该句改为改为: ...

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

有点疑问:
Object是所有类的父类,也就是说a3的字节码对象应该本来就是Object类型啊,为什么还要强转呀?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2