operatorul instanceof vs metoda isInstance() în Java

The instanţă de operator și isInstance() metoda ambele sunt folosite pentru verificarea clasei obiectului. Dar principala diferență vine atunci când dorim să verificăm clasa de obiecte în mod dinamic, atunci metoda isInstance() va funcționa. Nu există nicio modalitate de a face acest lucru de către operatorul instanceof.

Metoda isInstance este echivalentă cu operatorul instanceof. Metoda este utilizată în cazul în care obiectele sunt create în timpul execuției folosind reflectarea. Practica generală spune că dacă tipul trebuie verificat în timpul execuției, atunci utilizați metoda isInstance, altfel poate fi utilizat operatorul instanceof.

Instanța operatorului și Metoda isInstance() returnează ambele o valoare booleană. Metoda isInstance() este o metodă a clasei Class în java, în timp ce instanceof este un operator. 

Luați în considerare un exemplu:

Java
   // Java program to demonstrate working of   // instanceof operator   public     class   Test   {      public     static     void     main  (  String  []     args  )      {      Integer     i     =     new     Integer  (  5  );      // prints true as i is instance of class      // Integer      System  .  out  .  println  (  i     instanceof     Integer  );      }   }   

Ieșire: 

true 

Acum, dacă vrem să verificăm clasa obiectului în timpul rulării, atunci trebuie să folosim isInstance() metodă.

Java
   // Java program to demonstrate working of isInstance()   // method   public     class   Test     {      // This method tells us whether the object is an      // instance of class whose name is passed as a      // string 'c'.      public     static     boolean     fun  (  Object     obj       String     c  )      throws     ClassNotFoundException      {      return     Class  .  forName  (  c  ).  isInstance  (  obj  );      }      // Driver code that calls fun()      public     static     void     main  (  String  []     args  )      throws     ClassNotFoundException      {      Integer     i     =     new     Integer  (  5  );      // print true as i is instance of class      // Integer      boolean     b     =     fun  (  i       'java.lang.Integer'  );      // print false as i is not instance of class      // String      boolean     b1     =     fun  (  i       'java.lang.String'  );      // print true as i is also instance of class      // Number as Integer class extends Number      // class      boolean     b2     =     fun  (  i       'java.lang.Number'  );      System  .  out  .  println  (  b  );      System  .  out  .  println  (  b1  );      System  .  out  .  println  (  b2  );      }   }   

Ieșire: 

true false true 

Nota: operatorul instanceof aruncă o eroare de compilare (Tipuri de operanzi condiționate incompatibile) dacă verificăm obiectul cu alte clase pe care nu le instanțează.

Java
   public     class   Test     {      public     static     void     main  (  String  []     args  )      {      Integer     i     =     new     Integer  (  5  );      // Below line causes compile time error:-      // Incompatible conditional operand types      // Integer and String      System  .  out  .  println  (  i     instanceof     String  );      }   }   

Ieșire:  

9: error: incompatible types: Integer cannot be converted to String System.out.println(i instanceof String); ^ 

Trebuie citit:

  • operator nou vs metoda newInstance() în Java  
  • Reflecții în Java