问答详情
源自:9-9 Java 中的 Object 类 Ⅱ

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

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

            return false;

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

        Dog other = (Dog) obj;


提问者:qq__878 2015-07-30 19:42

个回答

  • 末日黑龙
    2015-08-01 11:13:15
    已采纳

    这条语句就是判断这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){

      }

    }

  • 末日黑龙
    2015-07-30 20:18:22

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

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