logo

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