黑马程序员技术交流社区

标题: 这个程序哪里错了 求指点 [打印本页]

作者: 待解封的小刀    时间: 2014-7-16 18:59
标题: 这个程序哪里错了 求指点
比较数组相不相同 我写了个程序
但是结果怎么不对呢 显示错误 找不到哪里错了 求指点。

class Demo
{       
        private int[] arr;
        Demo(int[] arr)
        {
                this.arr=arr;
       
        }
       
        public boolean equals(Object obj)//父类中没有年龄比较的定义。所以要向下转型。
        {                                                //父类引用指向子类对象。Object obj=new Demo();
               
                Demo d=(Demo)obj;
                return this.arr==d.arr;
       
        }

       
}
class ArrEquals
{
        public static void main(String[] args)
        {        int arr1[]={1,2,3};
                int arr2[]={1,2,3};
               
                 Demo p1=new Demo(arr1);
                 Demo p2=new Demo(arr2);
               
               
                System.out.println(p1.equals(p2));
       
       
        }


}答案是错误 我晕了 应该是正确才对啊 怎么解  求破。

作者: wyy666    时间: 2014-7-17 00:49
值得思考~
作者: 为爱编程    时间: 2014-7-17 08:12
是个问题啊,equals按理说是比较两者内容的啊。。。还有楼主写的那个equals方法意义何在呢??

作者: 待解封的小刀    时间: 2014-7-17 10:40
为爱编程 发表于 2014-7-17 08:12
是个问题啊,equals按理说是比较两者内容的啊。。。还有楼主写的那个equals方法意义何在呢??
...

嗯 确实多此一举 我改成 public boolean equals(Demo c)
                                {

                                      return this.arr==c.arr;

                                }
我把数组看组是类中的一个成员 这个问题怎么解?
作者: 为爱编程    时间: 2014-7-17 12:42
待解封的小刀 发表于 2014-7-17 10:40
嗯 确实多此一举 我改成 public boolean equals(Demo c)
                                {

数组本身并没有equals方法,但是因为Java中所有的类都继承Object,所以他调用的是Object的equals方法,这个equals方法的声明是:
public boolean equals(Object obj) {
return (this == obj);
}
所以说你做的比较是比较两个数组的内存地址,所以返回false。

要想返回true的话,你可以导入一个util包,调用Arrays类的equals方法(Arrays.equals(int[] a1,int[] a2))
,来比较两个数组内容是否相同!
作者: 待解封的小刀    时间: 2014-7-17 14:53
为爱编程 发表于 2014-7-17 12:42
数组本身并没有equals方法,但是因为Java中所有的类都继承Object,所以他调用的是Object的equals方法,这个e ...

嗯  明白
作者: rekirt    时间: 2014-7-17 22:58
哥,你比较的是对象呀,,那里有比较数组了,,
作者: 单线程xia    时间: 2014-7-18 17:26
为什么我的帖子被吞了。。

Object 的equals()方法比较的是 == ,解决方法就是override equals()

        @Override
        public boolean equals(Object obj) {
                Demo d = (Demo) obj;
                  if (this.arr == d.arr)
                    return true;
                if (this.arr ==null || d.arr==null)
                    return false;

                int length = this.arr.length;
                if (d.arr.length != length)
                    return false;

                for (int i=0; i<length; i++)
                    if (this.arr[i] != d.arr[i])
                        return false;

                return true;
        }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2