「こんにちは、アミーゴ! あなたはすでにinstanceof演算子を知っています。今日はそれがどこでどのように使用できるかを説明します。instanceofは非常にシンプルで効率的な演算子です。」

「広告っぽいですね!」

「実際は非常に簡単です。次のように使用します: «object» instanceof «class»。」

オブジェクトが特定のクラスのインスタンスであるかどうかをチェックします。説明するよりも簡単です。この例を見てください。

コード 説明
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt はtrueになります。変数 o によって参照されるオブジェクトは、Integerクラスのインスタンスです。
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt はfalseになります。変数 o によって参照されるオブジェクトは、Integerクラスのインスタンスではありません。Stringオブジェクトです。
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof FileInputStream;
isFIS はtrueになります。変数 o によって参照されるオブジェクトは、FileInputStreamクラスのインスタンスです。

「はい、それはとても簡単です。」

「この演算子は継承も考慮しています。確認してください。」

コード 説明
class Animal
{
}
class Cat extends Animal
{
}
class Tiger extends Cat
{
}
ここには、Animal、Cat、Tiger の 3 つのクラス宣言があります。猫は動物を継承します。そしてタイガーはキャットを引き継ぎます。
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat はtrue になります 。
isTiger はtrue になります 。
isAnimal はtrue になります 。
Object o = new Animal();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat はfalse になります。
isTiger はfalse になります 。
isAnimal はtrue になります 。

さらにはインターフェイスも:

コード 説明
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
2 つのクラスを作成します: Cat、TomCat、および Moveable インターフェイス
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat はtrue になります 。
isMoveable はtrue になります 。
isTom はtrue になります 。
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat はtrue になります 。
isMoveable はfalse になります 。
isTom はfalse になります 。

instanceof 演算子は、次のようになります: instanceof B

つまり、instanceof演算子は、次の場合にtrueを返します。

1)変数aには、タイプBのオブジェクトへの参照が格納されます。

2) 変数a は、クラスがBを継承するオブジェクトへの参照を格納します。 

3) 変数a には、インターフェイスBを実装するオブジェクトへの参照が格納されます。 

それ以外の場合、instanceof演算子はfalseを返します。

「分かった。では、なぜこれが必要なのですか、リシおじさん?」

「今日はエリーがそれについてお話します。このオペレーターは本当に素晴らしいです。今日ならきっと納得していただけるでしょう。」