本帖最后由 杨志 于 2012-7-29 21:36 编辑
很久没有来论坛了。
今天进来活动活动。一上来就是看到==和equals方法的区别的问题的帖子。这问题真的很麻烦么?
后面的同学的回答可谓各家之言,什么样的答案都有。
其实我想说的是,只要你们真的去看下jdk的源码就会发现很多问题。
其实 == 和equals方法是一样的。i没有任何区别(在没有进行重写的前提下)。
每每许多人喜欢去看所谓的百度,或者别人的言论。认为那就是对的。
其实不然,百度上面的东西很多都是 copy的。
许多你认识是绝对是正确的东西,在你动动手之后就发现那其实并不是那样的。
String类中之所以会有equls()方法和 ==的区别,关键就在于String 类中进行了重写。
在你自己进行javaBean比较的时候,如果没有重写,那equals和== 的结果都是一样的。
下面给一些JDK的源码:
这就是在jdk中的Object类中的equsl方法,其实调用的就是== 方法。- public boolean equals(Object obj) {
- return (this == obj);
- }
复制代码 下面看看String类中的equals方法- public boolean equals(Object anObject) {
- if (this == anObject) {
- return true;
- }
- if (anObject instanceof String) {
- String anotherString = (String)anObject;
- int n = count;
- if (n == anotherString.count) {
- char v1[] = value;
- char v2[] = anotherString.value;
- int i = offset;
- int j = anotherString.offset;
- while (n-- != 0) {
- if (v1[i++] != v2[j++])
- return false;
- }
- return true;
- }
- }
- return false;
- }
复制代码 其实认真去看就会发现String 类就是用字符数组实现的。
那么这里也就是用字符数组去循环比较它的值。
希望大家能多看看JDK 的文档。你就会发现很多事情其实真的不像百度上面那样说的。
曾经别人也是这样告诫我的。希望你们也能多去关注JDK 的源码,而不是只会去百度。
JDK的源码真的是一座宝库!
|
|