A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 待解封的小刀 中级黑马   /  2014-7-16 18:59  /  1361 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比较数组相不相同 我写了个程序
但是结果怎么不对呢 显示错误 找不到哪里错了 求指点。

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));
       
       
        }


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

8 个回复

正序浏览
为什么我的帖子被吞了。。

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;
        }
回复 使用道具 举报
rekirt 中级黑马 2014-7-17 22:58:55
7#
哥,你比较的是对象呀,,那里有比较数组了,,
回复 使用道具 举报
为爱编程 发表于 2014-7-17 12:42
数组本身并没有equals方法,但是因为Java中所有的类都继承Object,所以他调用的是Object的equals方法,这个e ...

嗯  明白
回复 使用道具 举报
待解封的小刀 发表于 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 08:12
是个问题啊,equals按理说是比较两者内容的啊。。。还有楼主写的那个equals方法意义何在呢??
...

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

                                      return this.arr==c.arr;

                                }
我把数组看组是类中的一个成员 这个问题怎么解?
回复 使用道具 举报
是个问题啊,equals按理说是比较两者内容的啊。。。还有楼主写的那个equals方法意义何在呢??
回复 使用道具 举报
值得思考~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马