"Ciao, Amigo! Hai già conosciuto l' operatore instanceof . Oggi ti dirò come e dove può essere utilizzato. instanceof è un operatore molto semplice ed efficiente."

"Sembra una pubblicità!"

"È davvero molto semplice. Si usa così: «object» instanceof «class» ."

Controlla se un oggetto è un'istanza di una particolare classe. È più facile che spiegarlo. Guarda questo esempio:

Codice Descrizione
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt sarà true . L'oggetto a cui fa riferimento la variabile o è un'istanza della classe Integer .
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt sarà falso . L'oggetto a cui fa riferimento la variabile o non è un'istanza della classe Integer . È un oggetto String .
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof FileInputStream;
isFIS sarà vero . L'oggetto a cui fa riferimento la variabile o è un'istanza della classe FileInputStream .

"Sì, è molto semplice."

"Questo operatore tiene conto anche dell'ereditarietà. Dai un'occhiata."

Codice Descrizione
class Animal
{
}
class Cat extends Animal
{
}
class Tiger extends Cat
{
}
Qui abbiamo tre dichiarazioni di classe: Animale, Gatto e Tigre. Il gatto eredita l'animale. E Tiger eredita Cat.
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat  sarà  vero .
isTiger  sarà  vero .
isAnimal  sarà  vero .
Object o = new Animal();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat  sarà falso .
isTiger  sarà  falso .
isAnimal  sarà  vero .

E anche interfacce:

Codice Descrizione
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
Crea due classi: Cat, TomCat e l'interfaccia mobile
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat  sarà  vero .
isMoveable  sarà  true .
isTom  sarà  vero .
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat  sarà  vero .
isMoveable  sarà  false .
isTom  sarà  falso .

L'operatore instanceof ha questo aspetto: a instanceof B .

In altre parole, l' operatore instanceof restituirà true se:

1) la variabile a memorizza un riferimento a un oggetto di tipo B

2)  la variabile a memorizza un riferimento a un oggetto la cui classe eredita  B

3)  la variabile a memorizza un riferimento a un oggetto che implementa l'interfaccia  B

In caso contrario, l' operatore instanceof restituirà false .

"Capito. Allora perché è necessario, zio Rishi?"

"Ellie te ne parlerà oggi. Questo è davvero un bravo operatore. Ne sarai convinto oggi."