黑马程序员技术交流社区
标题:
请教反射视频里的问题
[打印本页]
作者:
yujiangjiao
时间:
2014-4-11 04:17
标题:
请教反射视频里的问题
这是成员变量反射综合案例这节, 获取字段的类型,为什么字节码类型的比较要用==,而不用equals,二者有什么区别,什么时候用equals,什么时候用==,有些疑惑,请教高手解惑,感谢
public static void changeStringValue(Object obj) throws Exception
{
//扫描成员变量Field 类
Field[] fields=obj.getClass().getFields();
for(Field field:fields)//加上类型Field
{
//if(field.getType().equals(String.class));//获取字段的数据类型(不用equals比较)
if(field.getType()==String.class)//为什么字节码类型的比较要用==,而不用equals,二者有什么区别
{
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b', 'a');
field.set(obj, newValue);
}
}
}
复制代码
作者:
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