String s1=new String("haha");
String s2=new String("haha");
//发现s1==s2为假,s1.equals(s2)为真,很合适,但是:public class Egg
{
public int m=4;
}Egg e1=new Egg();
Egg e2=new Egg();//e1==e2和e1.equals(e2)都为假,为什么?----------------
请不明白的人不要乱回答,以免那些懂的人发现这不是新贴于是不进来了……
String s2=new String("haha");
//发现s1==s2为假,s1.equals(s2)为真,很合适,但是:public class Egg
{
public int m=4;
}Egg e1=new Egg();
Egg e2=new Egg();//e1==e2和e1.equals(e2)都为假,为什么?----------------
请不明白的人不要乱回答,以免那些懂的人发现这不是新贴于是不进来了……
所有的类都继承Object这个类,你的Egg也不例外。因此你的Egg继承了Object的equals方法。而你没有重写此方法,所以,e1.equals(e2)其实是调用了Object的equals方法。下面,让你看看Object的eqauls方法是如何实现的?
下面的代码,是从Java源代码中提取的:public boolean equals(Object obj) {
return (this == obj);
}这代码实在简洁,看出问题没?this是调用equals方法的对象,obj是待比较对象。而Object的equals方法是用==比较的,即比较它们的地址。你的e1,e2的地址当然不同啦。
显示,你是想比较它们的成员m,所以,就自己重写equals吧
{
public int num;
public MyObject(int num){
this.num=num;
}
public boolean equals(Object obj){
return this.num==((MyObject)obj).num;
}
}
public class NewClass {
public static void main(String args[]) throws Exception{
MyObject o1=new MyObject(1);
MyObject o2=new MyObject(1);
MyObject o3=new MyObject(2);
System.out.println(o1.equals(o2));
System.out.println(o1.equals(o3));
}
}