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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangqing 黑马帝   /  2011-11-21 22:35  /  2437 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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))

6 个回复

倒序浏览
如果两份字节码一样,有==比较,语义上准确,显得专业,而equals也可以,但语义上不准确,没用==专业,比较字节码用==。
回复 使用道具 举报
因为你想比较的是这两种字节码是不是一份,所以用==
回复 使用道具 举报
这里指的是同一份字节码所以用==,特指同一份;equals指不同的对象内容相同
回复 使用道具 举报
if(field.getType().equals(String.class))是比较两者之间的内容的。
而if(field.getType()==String.class)是比较两者的之间的地址的。
八大基本类型只能用"=="比较不能用equals比较。
回复 使用道具 举报
if(field.getType().equals(String.class))

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

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

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

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

所以你还得覆盖eauqls()方法,来说明
回复 使用道具 举报
冯敏 黑马帝 2011-11-22 12:15:17
7#
为什么==优于equals方法?那你得看它们的作用啦,==方法是比较两个变量的值是否相等,对于引用型变量比较的是两变量在内存中的地址是否相同,equals比较的是两个变量是否是对同一个对象的引用,也就是比较的内容,上面的程序中关心的是地址和内容吧,所以==比较好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马