为了账号安全,请及时绑定邮箱和手机立即绑定

老师说这个是判断两个对象类型是否相等,可是两个类型不是不一样么?老师说一样,一样的话后面怎么还要转换类型

    if (getClass() != obj.getClass())

            return false;

//将传入的对象强制转换为当前对象

        Dog other = (Dog) obj;


正在回答

2 回答

这条语句就是判断这2个对象的类的类型是否一样的。getClass()是this对象的类的类型,就是调用这个方法的对象。

obj.getClass()是参数传递过来的对象的类的类型,就是你要比较目标的类的类型。

举个例子吧:

还是Dog这个类,你重写了equals方法。重写的目的是当使用blackDog对象的时候,你发现还有一个叫whiteDog的对象,你想比较他俩是否相等。如果不重写equals方法,只能他俩的地址值相同,但实际上你想比较的是名字、性别、品种什么的是否相同。那当你使用这句boolean flag=blackDog.equals(whiteDog);的时候,"if (getClass() != obj.getClass())" 这里第一个getClass()就是blackDog调用的,obj.getClass就是 whiteDog调用的。

(Dog blackDog=new Dog();whiteDog不是你创建的,所以你不清楚他是什么类)

class Dog{

   public boolean equals(object obj){

  }

}

2 回复 有任何疑惑可以回复我~
#1

qq__878 提问者

非常感谢!
2015-08-03 回复 有任何疑惑可以回复我~
#2

comeonusa1 回复 qq__878 提问者

我还是没明白,你给讲讲。。whitedog不是我创建的,前面都已经证明他们是一个类了啊。为什么还要强制转换
2015-08-07 回复 有任何疑惑可以回复我~
#3

comeonusa1

虽然我不清楚white dog是什么类,但是系统可以判断啊。
2015-08-07 回复 有任何疑惑可以回复我~
#4

末日黑龙 回复 comeonusa1

你好!我在另一个帖子相似内容做了回复,你看看能否有帮助。 http://www.imooc.com/qadetail/89561
2015-08-10 回复 有任何疑惑可以回复我~
#5

末日黑龙 回复 comeonusa1

比如我的dog类是这样写的class Dog{public void eat(){}},就是只有一个eat的方法。但是我创建对象的时候,我是用Object whiteDog=new Dog();这样写没错吧,这个whiteDog对java来说是Object类型,但我们知道它实际构造的是Dog的对象。如果我们想用whiteDog的eat()方法,直接写whiteDog.eat()是不行的,因为Object没有eat()方法。所以我们做一下转换(Dog)whiteDog.eat()就可以了。
2015-08-10 回复 有任何疑惑可以回复我~
查看2条回复

比如说Dog类里面有name这个属性吧。

传递进来的是Object类的对象吧,Object对象可是没有name这个属性的,那该怎么比较呢?所以首先要判断类是否一样,如果都是Dog了,那就都有name属性了,但传递进来的是Object对象,想调用的话不强转是不能调用的。
0 回复 有任何疑惑可以回复我~
#1

qq__878 提问者

if (getClass() != obj.getClass()) return false; 这个是用来判断类型一样的么?判断的是哪两个的类型呢?
2015-07-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师说这个是判断两个对象类型是否相等,可是两个类型不是不一样么?老师说一样,一样的话后面怎么还要转换类型

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信