黑马程序员技术交流社区
标题:
反射问题
[打印本页]
作者:
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