黑马程序员技术交流社区

标题: 一个小问题 [打印本页]

作者: 张明星    时间: 2012-4-1 10:28
标题: 一个小问题
private static void changeStringValue(Object obj)throws Exception{
                        Field[] fields=obj.getClass().getFields();
                        for(Field field: fields){
                                if(field.getType()==String.class)  //字节码比较用等号
                                {
                                        String oldValue = (String)field.get(obj);
                                        String newValue=oldValue.replace('b', 'a');
                                        field.set(obj, newValue);
                                }
张老师的视频上说:比较两个字节码相同用等号,不用equals,原因是什么,谁能解释的清楚一点?
作者: 曹魁    时间: 2012-4-1 11:34

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:

String a=new String("foo");

String b=new String("foo");

两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。


作者: 李井山    时间: 2012-4-1 21:25
==比较的是是否是同一个,equals比较的是2个对象是否相等
假如桌子上有一个苹果,俩个引用都指向他,这俩个引用叫==
假如桌子上有2个苹果,两个引用分别指向他们,这时是equals
你代码中的例子是因为在内存中只有一份字节码
作者: 袁计艳    时间: 2012-4-1 22:18
“==”对于基本数据类型,判断两个变量的值是否相等。equal用于比较两个对象是否相同。而字节码为对象具体值,所以用“==”






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