qq__878
2015-07-30 19:42
if (getClass() != obj.getClass())
return false;
//将传入的对象强制转换为当前对象
Dog other = (Dog) obj;
这条语句就是判断这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){
}
}
比如说Dog类里面有name这个属性吧。
传递进来的是Object类的对象吧,Object对象可是没有name这个属性的,那该怎么比较呢?所以首先要判断类是否一样,如果都是Dog了,那就都有name属性了,但传递进来的是Object对象,想调用的话不强转是不能调用的。Java入门第二季 升级版
530559 学习 · 6091 问题
相似问题