黑马程序员技术交流社区

标题: 关于反射。 [打印本页]

作者: 王德升    时间: 2012-7-18 22:10
标题: 关于反射。
aprivate static void printObject(Object obj) {

                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);

                }
               
        }

        private static void changeStringValue(Object obj) throws Exception {

                Field[] fields = obj.getClass().getFields();//getFields是什么方法?

                for(Field field : fields){

                        if(field.getType() == String.class){//这里为什么用==,而不是equals,比较字符串的是否相同不是equals吗?

                                String oldValue = (String)field.get(obj);

                                String newValue = oldValue.replace('b', 'a');

                                field.set(obj, newValue);
                        }
                }
               
        }

}


class TestArguments{

        public static void main(String[] args){

                for(String arg : args){

                        System.out.println(arg);

                }
        }
}

作者: 黑马-王言龙    时间: 2012-7-18 22:34
这里不是字符串了,而是由字段信息反射为了字段类,是字节码。
作者: 黑马罗坚    时间: 2012-7-18 22:39
这里==好和equals的效果是一样的  而==好比较更符号面对对象的实现   标记的是该类在内存中的字节码  在内存中只有一份
作者: 袁錦泰    时间: 2012-7-19 00:30
★╃小胖╃☆ 发表于 2012-7-18 22:43
都是大婶啊.我就思考了一下,就坐报纸了

你回答得挺好,加油吧!
作者: 黄锐    时间: 2012-7-19 13:20
本帖最后由 黄锐 于 2012-7-19 13:32 编辑

1.System.out.println(Array.get(obj, i));//这打印的是什么?
这句代码, [attach]4557[/attach]以Array关键字里面的getLength(Object array)方法 返回static int类型,打印出此数组的第i个元素,它在此行代码上面的for循环{}里面所以利用getLength(Object array)方法打印出所有元素。

2.Field[] fields = obj.getClass().getFields();//getFields是什么方法?

帮你从API找出来了,返回包含File类对象的数组 ,就是返回for循环{}里面的System.out.println(Array.get(obj, i));打印其所有的数组元素。

3.   if(field.getType() == String.class){//这里为什么用==,而不是equals,比较字符串的是否相同不是equals吗?
这里比较的是字节码,不是字符串,字符串最明显的是要加""号。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。





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