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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李贺晓 中级黑马   /  2012-10-25 09:49  /  1902 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A
{
        public A(int count)
        {
                this.count=count;
        }
        public boolean equals(Object obj)
        {
                if(obj=this)
                {
                        return ture;
                }
                if(obj!=null && obj.getClass()==A.class )
                {
                        A a=(A) obj;
                        if(this.count=a.count)
                        {
                                return ture;
                        }
                }
                return false;
        }
        public int hashCode()
        {
                return this.count;
        }
}
此方法中重写了equals方法,在equals方法中obj.getClass()==A.class是起什么 作用的,效果是什么?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

8 个回复

倒序浏览
感觉就是 obj instance A
回复 使用道具 举报
陈琦 发表于 2012-10-25 09:53
感觉就是 obj instance A

应该不是吧,如果是这个样子的话,obj instance A这个永远都是真的啊,obj是Object类型的,它是最顶级的啊
回复 使用道具 举报
每个类都有一个自己的唯一的字节码文件,其实就是判断obj对象和A对象是否是同一个对象。而obj instanceof A是说obj是否为A的一个实例,如果obj为A的子类,同样返回true,但是字节码就不一样了。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
李贺晓 发表于 2012-10-25 10:02
应该不是吧,如果是这个样子的话,obj instance A这个永远都是真的啊,obj是Object类型的,它是最顶级的 ...

嗯嗯 学习了
回复 使用道具 举报
obj.getClass()==A.class是判断是不是同类;
this.count==a.count(原码漏了一个“=”)是判断是不是同值。
只有既同类又同值才能判定“equals”为真。
回复 使用道具 举报
曹自祥 发表于 2012-10-25 10:51
obj.getClass()==A.class是判断是不是同类;
this.count==a.count(原码漏了一个“=”)是判断是不是同值。 ...

这里说的同类就是说你输入的对象也是是属于就相当于A a =new A()吧?
回复 使用道具 举报
up_ 中级黑马 2012-10-25 12:37:55
8#
obj.getClass()==A.class
getClass方法返回的是该类的运行时类,也就是类加载进内存所产生的字节码文件,不管通过该类new出多少对象,字节码文件是一致的,class返回的也是字节码文件,所以判定的是obj对象和A对象是否为同一个字节码文件所产生的对象。
另外同学
  public A(int count)
        {
                this.count=count;
        }
你这样写是有问题的,要把count定义在外面。
回复 使用道具 举报
本帖最后由 水木桶 于 2012-10-25 16:05 编辑

判断传进来的对象obj是否和A是一个类。。
应该可以用 obj instanceof A 来代替。

A a=(A) obj;
这句就是典型的向下转型了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马