SJC-P対策 演算子


前回に引き続き、java演算子について復習。


Java特有の演算子について


instanceof演算子はオブジェクト参照変数を比較するのに使う。
つまり、参照変数の型をチェックするだけの事。
ちなみに、比較するオブジェクト参照変数が、
ダウンキャスト可能か調べる事も出来る。
Javaの配列は常にオブジェクト型である。


.
.
//この場合は、strが文字列型かどうか調べる処理。
//型が同じなら、真となる。
String str = "";
if (str instanceof String) {}
.
.
.
// ダウンキャスト可能か調べる
class A {}
class B extends A {
  public static void main(String args[])
  {
    A a = new B();//Aのサブクラスのインスタンスを参照
    if(a instanceof B)
      ((B)a).put();//ダウンキャストする
  }
  public static void put(){
    system.out.println("class is B");
  }
}

	class is B


SJC-Pの試験では、オブジェクトのクラスがインターフェースの間接的に
実装しているかどうかを調べるために、instanceof演算子
使った問題が出題される事が有る。
この場合は、オブジェクトのクラスが間接的にインターフェースを
実装していれば、結果は真となる。

public interface HogeHoge {}
public class Foo implements HogeHoge {}
public class FooHoge extends Foo {}
.
.
.
FooHoge var = new FooHoge();
if(var instanceof HogeHoge){}  //真となる




配列は常にオブジェクト型である。

int [] arr = new int[10];
if(arr instanceof Object) {} //真...


あるクラスから派生した、サブクラス同士を
instanceof演算子で比較する事は出来ない。

class Dog {}
class Cat {
  Cat cat = new Cat();
  if(cat instanceof Dog) {} //コンパイルできない