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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张明星 中级黑马   /  2012-4-1 10:28  /  1942 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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,原因是什么,谁能解释的清楚一点?

3 个回复

正序浏览
“==”对于基本数据类型,判断两个变量的值是否相等。equal用于比较两个对象是否相同。而字节码为对象具体值,所以用“==”

回复 使用道具 举报
==比较的是是否是同一个,equals比较的是2个对象是否相等
假如桌子上有一个苹果,俩个引用都指向他,这俩个引用叫==
假如桌子上有2个苹果,两个引用分别指向他们,这时是equals
你代码中的例子是因为在内存中只有一份字节码
回复 使用道具 举报

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

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

String a=new String("foo");

String b=new String("foo");

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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马