黑马程序员技术交流社区
标题: 〈已解决〉关于反射比较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为二维数组数组含,数组类型不一样不能用==比较。楼主可以把该句改为改为:- 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 |