Java no memo

自分のためのJavaメモ。

instanceof演算子

  • 右辺に指定したクラスのオブジェクトである。
  • 右辺に指定したクラスのサブクラスのオブジェクトである。
  • 右辺に指定したインターフェースの実装クラスである。
  • 右辺に指定したインターフェースの実装クラスのサブクラスである。
// Human.java
class Human {

}
// Woman.java
class Woman extends Human {

}
// Test.java
public class Test {
  public static void main(String[] args) {
    Human h = new Human();
    Woman w1 = new Woman();
    Human w2 = new Woman();
    System.out.println(h instanceof Human);  // true
    System.out.println(w1 instanceof Human); // true
    System.out.println(w2 instanceof Human); // true
    System.out.println(h instanceof Woman);  // false
    System.out.println(w1 instanceof Woman); // true
    System.out.println(w2 instanceof Woman); // true   
  } 
}
// Human.java
interface Human {

}
// Woman.java
interface Woman extends Human {

}
// Warrior.java
class Warrior implements Woman {

}
// Test.java
public class Test {
  public static void main(String[] args) {
    Warrior w = new Warrior();
    System.out.println(w instanceof Human);   // true
    System.out.println(w instanceof Woman);   // true
    System.out.println(w instanceof Warrior); // true
  } 
}
  • プリミティブ型(String や int)は右辺に置けない。エラー。
  • ラッパークラスも同じ。