class MyClass
{
    static int num;
    MyClass(int num)
    {
        this.num = num;
    }
}
public class test
{
    public static void main(String[]args)
    {
        MyClass a = new MyClass(100);
        MyClass b = new MyClass(100);
        if(a.equals(b))
        {
            System.out.println("Objects have the same values");
        }
        else
        {
            System.out.println("Objects have the different values");
        }
    }
}打印结果是a b不等
但是我认为a b 都是MyClass类的引用,为什么就不相等呢

解决方案 »

  1.   

    这么说吧,类MyClass就是施工图纸,
    MyClass a = new MyClass(100);
    MyClass b = new MyClass(100);
    上述代码中的a、b是按图施工得到的两个产品实际是不同的equals方法在Object类中与==等价的,如果你想使它有真正的作用,要重写MyClass类中的equals方法,推荐同时改写hashCode()
      

  2.   

    因为equals方法没有被重写,所以这里比较的是引用指向的地址,当然不一样了。
      

  3.   

    要区别String.equals(Object anObject)与Object.equals(Object obj),看看源代码。
      

  4.   

    equals()就是一个普通的方法而已,没有什么特殊的功能,Object类让它和==操作符同义,你如果没有为你的类重写equals(),它和Object中的equals()就没什么区别。