L'opérateur instanceof permet de vérifier si une référence d'objet est une instance d'une certaine classe ou interface.

boolean resultat = reférence_objet instanceof {Classe | Interface};

L'opérateur instanceof s'applique aux références d'objets mais ne sert pas à comparer deux objets entre eux mais simplement à en déterminer la classe d'instanciation ou l'interface d'implémentation.

L'opérateur retourne true si l'objet désigne effectivement une instance de la classe ou d'une classe dérivée de cette dernière, sinon il retourne toujours false.
Si la référence d'objet implémente l'interface spécifiée, alors l'opérateur renvoie également true, sinon false.

Toutes les classes héritant de Object et partant tous les objets étant des instances d'une classe dérivée de Object, l'expression ref_objet instanceof Object vaut toujours True.

Si l'objet est égal à null, dans tous les cas, le résultat est false.

Si le transtypage de l'opérande de gauche vers le type de référence n'est pas autorisé lors de la compilation, le compilateur indiquera une erreur semblable pour la tentative de comparaison avec l'opérateur instanceof.

class Classe {
  ...
}

class Classe_Etendue extends Classe {
  ...
}

class Autre_Classe{
  ...
}

class Programme {
  void methode(){
  Classe objet_1 = new Classe_Etendue();
  Classe objet_2 = new Classe();
  Object objet_3 = new Classe();
  Object objet_4 = new Autre_Classe();
  Object objet_5 = null;
  Object objet_6 = new Object();
  objet_6 = objet_1;

  boolean resultat = objet_1 instanceof Classe_Etendue;
  // resultat = True
  boolean resultat = objet_1 instanceof Classe;
  // resultat = true
  boolean resultat = objet_2 instanceof Classe_Etendue;
  // resultat = false
  boolean resultat = objet_3 instanceof Classe;
  // resultat = true
  boolean resultat = objet_4 instanceof Object;
  // resultat = false
  boolean resultat = objet_5 instanceof Classe;
  // produit une erreur de compilation.
  boolean resultat = objet_5 instanceof Object;
  // resultat = true
  boolean resultat = objet_6 instanceof Classe_Etendue;
  // resultat = true
  boolean resultat = objet_6 instanceof Classe;
  // resultat = true
  }
}

Pour une comparaison de types de référence, il est préférable d'utiliser plutôt la méthode isAssignableFrom() définie dans la classe java.lang.Class.