黑马程序员技术交流社区

标题: 请教反射视频里的问题 [打印本页]

作者: yujiangjiao    时间: 2014-4-11 04:17
标题: 请教反射视频里的问题
这是成员变量反射综合案例这节, 获取字段的类型,为什么字节码类型的比较要用==,而不用equals,二者有什么区别,什么时候用equals,什么时候用==,有些疑惑,请教高手解惑,感谢

  1. public static void changeStringValue(Object obj) throws Exception
  2.         {
  3.                 //扫描成员变量Field 类
  4.                 Field[] fields=obj.getClass().getFields();
  5.                 for(Field field:fields)//加上类型Field
  6.                 {
  7.                         //if(field.getType().equals(String.class));//获取字段的数据类型(不用equals比较)
  8.                         if(field.getType()==String.class)//为什么字节码类型的比较要用==,而不用equals,二者有什么区别
  9.                         {
  10.                                 String oldValue=(String)field.get(obj);
  11.                                 String newValue=oldValue.replace('b', 'a');
  12.                                 field.set(obj, newValue);
  13.                                
  14.                         }
  15.                        
  16.                 }
  17.         }
复制代码

作者: Tking    时间: 2014-4-11 07:29
因为字节码在内存中值存在唯一的一份,用==就可以比较
equals也可以,但是显得有些多余,

==比较的是内存地址
equals是条用Object内的比较,默认情况向与==是相同的道理
只用重写了某个类的equals才会不相同
作者: 491138002    时间: 2014-4-11 11:17
1. == 基本数据类型都用这个比较
Java里面包含8个基本数据类型,分别是:
boolean、byte、char、short、int、float、double、long
注意String 不属于基本数据类型,它是个类
2..equals() 用于引用数据类型(除了上面的8个,都是引用数据类型,包括封装类,Object子类等),  比较是否指向相同的对象,
例如 String str = "abc";
等效于: char data[] = {'a', 'b', 'c'};  String str = new String(data);
就是str 指向了  new String(data) 这个对象. 如果再有其他变量也指向这个对象,他们比较的结果就返回true;
由于此方法在Object里, 所以它有很多重写, 具体要看说明
作者: syusikoku    时间: 2014-4-11 11:42
因为equals的内部就是==,所以你在比较字节码文件是否是同一份,就可以使用==来直接进行比较。
作者: xiaochen33520    时间: 2014-4-11 11:54
.equals一般是用于比较内容,而==是用来比较内存地址,所以判断对象是否相等一般用equals比较内容,而判断类(字节码)是否相等一般是用==比较,因为类比较一般都是比较是不是同一个类(字节码)。这要看你比较是出于什么目的了。。
作者: Up↑Lee↗    时间: 2014-4-11 11:59
这里用equal闲的有点多余,不是很符合语义,因为equal用的就是==方法,还有根据自己的比较情况复写的。类的字节码在内存里只有一份,用==就可以了





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