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)都为假,为什么?----------------
请不明白的人不要乱回答,以免那些懂的人发现这不是新贴于是不进来了……

解决方案 »

  1.   

    先解释一下,为什么会都是假呢。
    所有的类都继承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吧
      

  2.   

    给你一个重写equals的示例:class MyObject
    {
        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));
        }
    }
      

  3.   

    用心去研究下“==和equals的区别”比什么都好。