黑马程序员技术交流社区

标题: 反射问题 [打印本页]

作者: wangqing    时间: 2011-11-21 22:35
标题: 反射问题
本帖最后由 wangqing 于 2011-11-27 13:34 编辑

private static void changeStringValue(Object obj)throws Exception {
                // TODO Auto-generated method stub
               
                java.lang.reflect.Field[] fields=obj.getClass().getFields();
               
                for(java.lang.reflect.Field field :fields)
                {
                        //if(field.getType().equals(String.class))
                        if(field.getType()==String.class)
                        {
                                String oldValue=(String)field.get(obj);
                                String newValue=oldValue.replace("b", "a");
                                field.set(obj, newValue);
                        }
                }
        }
上面:if(field.getType().equals(String.class))和if(field.getType()==String.class)有什么特别的区别吗?为什么在这里if(field.getType()==String.class)
优于if(field.getType().equals(String.class))

作者: 李龙龙    时间: 2011-11-22 01:02
如果两份字节码一样,有==比较,语义上准确,显得专业,而equals也可以,但语义上不准确,没用==专业,比较字节码用==。
作者: 侯伟浩    时间: 2011-11-22 09:39
因为你想比较的是这两种字节码是不是一份,所以用==
作者: 张邦庆    时间: 2011-11-22 09:57
这里指的是同一份字节码所以用==,特指同一份;equals指不同的对象内容相同
作者: moonlight    时间: 2011-11-22 10:12
if(field.getType().equals(String.class))是比较两者之间的内容的。
而if(field.getType()==String.class)是比较两者的之间的地址的。
八大基本类型只能用"=="比较不能用equals比较。
作者: 申绪胜    时间: 2011-11-22 11:09
if(field.getType().equals(String.class))

这个equals两边都是Class类型的,所以判断时,要根据Class类里面的equals()方法

而if(field.getType()==String.class)单独就是代表的这个类型在地址中的哈希

如果你要判断两个类型是否一直,是否是一个对象,建议你用==

但是如果是两个相同的对象,他们的地址值肯定不一样

所以你还得覆盖eauqls()方法,来说明

作者: 冯敏    时间: 2011-11-22 12:15
为什么==优于equals方法?那你得看它们的作用啦,==方法是比较两个变量的值是否相等,对于引用型变量比较的是两变量在内存中的地址是否相同,equals比较的是两个变量是否是对同一个对象的引用,也就是比较的内容,上面的程序中关心的是地址和内容吧,所以==比较好




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