"¡Hola Amigo! Ya conoces el operador instanceof . Hoy te voy a contar cómo y dónde se puede utilizar. instanceof es un operador muy simple y eficiente."

"¡Eso suena como un anuncio!"

"Realmente es muy simple. Se usa así: «objeto» instancia de «clase» .

Comprueba si un objeto es una instancia de una clase en particular. Es más fácil que explicarlo. Mira este ejemplo:

Código Descripción
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt será verdadero . El objeto al que hace referencia la variable o es una instancia de la clase Integer .
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt será falso . El objeto al que hace referencia la variable o no es una instancia de la clase Integer . Es un objeto de cadena .
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof FileInputStream;
isFIS será verdadero . El objeto al que hace referencia la variable o es una instancia de la clase FileInputStream .

"Sí, eso es muy simple".

"Este operador también da cuenta de la herencia. Compruébalo".

Código Descripción
class Animal
{
}
class Cat extends Animal
{
}
class Tiger extends Cat
{
}
Aquí tenemos tres declaraciones de clase: Animal, Cat y Tiger. Gato hereda Animal. Y Tiger hereda Cat.
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat  será  cierto .
isTiger  será  cierto .
isAnimal  será  cierto .
Object o = new Animal();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat  será falso .
isTiger  será  falso .
isAnimal  será  cierto .

E incluso interfaces:

Código Descripción
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
Crea dos clases: Cat, TomCat y la interfaz Moveable
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat  será  cierto .
isMoveable  será  verdadero .
isTom  será  cierto .
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat  será  cierto .
isMoveable  será  falso .
isTom  será  falso .

El operador instanceof se ve así: una instancia de B .

En otras palabras, el operador instanceof devolverá verdadero si:

1) la variable a almacena una referencia a un objeto de tipo B

2)  la variable a almacena una referencia a un objeto cuya clase hereda  B

3)  la variable a almacena una referencia a un objeto que implementa la interfaz  B

De lo contrario, el operador instanceof devolverá false .

"Entendido. Entonces, ¿por qué es esto necesario, tío Rishi?"

"Ellie te hablará de eso hoy. Este es un operador muy agradable. Te convencerás de eso hoy".