刚才看了一些在论坛里的文章,看到这个:equals()方法在缺省条件下的含义同==一样,但是你可以对不同的类重载equals()方法类实现自己的相等定义,比如String类就重载了equals()类比较两个字符串的内容。
那是不是这里的Value类里也是没有重载equals()
的缘故,所以就和 == 一样了呢?
那是不是这里的Value类里也是没有重载equals()
的缘故,所以就和 == 一样了呢?
Value v2=new Value();
v1.i=v2.i=100;
V1,V2的地址一樣嗎?
Value();又沒有對equals做重載
{
int i;
} public class EqualsMethods
{ public static void main(String[] args)
{
Value v1=new Value();
Value v2=new Value();v1.i = v2.i = 100;
System.out.println(v1.i);
System.out.println(v2.i);System.out.println(v1);
System.out.println(v2);System.out.println(v1.equals(v2));
}
}
这样你就清楚了,v1.equals(v2)的时间,比较的是v1和v2的值,作为用户自定义类型(类)的话,比较的是对象声明构建以后所在的地址。
所以返回的是false
== 对于原始类型比较的是值,对于引用类型比较的是句柄(其实句柄也是值)
equal 是java.lang.Object的方法,源码:
public boolean equals(Object obj) {
return (this == obj);
}
也就是说,如果我们的类没有覆盖equals方法,那么效果跟==一样
如果我们的类覆盖了equals方法,那么效果就是你自己定义的了,像String类,覆盖了equals方法,判断并返回两者的内容是否一致。搂主的举的例子肯定是false,如果返回了true,那么可以向你的jre的厂商举报bug了
equals()比较的是地址,
自己定义的类要用这个方法时要重载,否则就是和 == 的用法一样了!