instanceof operator vs isInstance() Methode in Java

De exemplaarvan exploitant en isInstance() methode worden beide gebruikt voor het controleren van de klasse van het object. Maar het belangrijkste verschil komt wanneer we de klasse van objecten dynamisch willen controleren, dan zal de methode isInstance() werken. We kunnen dit op geen enkele manier doen via een operator.

De methode isInstance is gelijk aan de operator instanceof. De methode wordt gebruikt als objecten tijdens runtime worden gemaakt met behulp van reflectie. De algemene praktijk zegt dat als het type tijdens runtime moet worden gecontroleerd, de isInstance-methode moet worden gebruikt, anders kan de instanceof-operator worden gebruikt.

Het exemplaar van operator en isInstance()-methode retourneren beide een Booleaanse waarde. De methode isInstance() is een methode van klasse Class in Java, terwijl instanceof een operator is. 

Overweeg een voorbeeld:

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  );      }   }   

Uitgang: 

true 

Als we nu de klasse van het object tijdens runtime willen controleren, moeten we gebruiken isInstance() methode.

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  );      }   }   

Uitgang: 

true false true 

Opmerking: instanceof operator genereert een compileerfout (incompatibele voorwaardelijke operandtypen) als we het object controleren met andere klassen die niet worden geïnstantieerd.

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  );      }   }   

Uitgang:  

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

Moet lezen:

  • nieuwe operator versus newInstance()-methode in Java  
  • Reflecties op Java