What is the 'instanceof' operator used for in Java?

前端 未结 17 805
梦毁少年i
梦毁少年i 2020-11-22 03:03

What is the instanceof operator used for? I\'ve seen stuff like

if (source instanceof Button) {
    //...
} else {
    //...
}

17条回答
  •  南笙
    南笙 (楼主)
    2020-11-22 03:43

    instanceof keyword is a binary operator used to test if an object (instance) is a subtype of a given Type.

    Imagine:

    interface Domestic {}
    class Animal {}
    class Dog extends Animal implements Domestic {}
    class Cat extends Animal implements Domestic {}
    

    Imagine a dog object, created with Object dog = new Dog(), then:

    dog instanceof Domestic // true - Dog implements Domestic
    dog instanceof Animal   // true - Dog extends Animal
    dog instanceof Dog      // true - Dog is Dog
    dog instanceof Object   // true - Object is the parent type of all objects
    

    However, with Object animal = new Animal();,

    animal instanceof Dog // false
    

    because Animal is a supertype of Dog and possibly less "refined".

    And,

    dog instanceof Cat // does not even compile!
    

    This is because Dog is neither a subtype nor a supertype of Cat, and it also does not implement it.

    Note that the variable used for dog above is of type Object. This is to show instanceof is a runtime operation and brings us to a/the use case: to react differently based upon an objects type at runtime.

    Things to note: expressionThatIsNull instanceof T is false for all Types T.

    Happy coding.

提交回复
热议问题