logo

instanceof operator vs isInstance() metódus a Java nyelvben

A példánya operátor és isPéldány() mindkettőt az objektum osztályának ellenőrzésére használják. De a fő különbség az, hogy dinamikusan szeretnénk ellenőrizni az objektumok osztályát, akkor az isInstance() metódus fog működni. Ezt az instanceof operátorral nem tudjuk megtenni.

Az isInstance metódus egyenértékű az instanceof operátorral. A módszert akkor használják, ha az objektumok futás közben, tükrözéssel jönnek létre. Az általános gyakorlat szerint ha a típust futás közben kell ellenőrizni, akkor használja az isInstance metódust, különben az instanceof operátor használható.

Az operátor és Az isInstance() metódus egyaránt logikai értéket ad vissza. Az isInstance() metódus a Class osztály metódusa a java-ban, míg az instanceof egy operátor. 



Vegyünk egy példát:

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

Kimenet: 

true

Most, ha ellenőrizni akarjuk az objektum osztályát futás közben, akkor használnunk kell isPéldány() módszer.

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

Kimenet: 

true false true

Jegyzet: Az instanceof operátor fordítási idejű hibát dob ​​(inkompatibilis feltételes operandustípusok), ha más osztályokkal ellenőrizzük az objektumot, amelyeket nem példányosít.

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

Kimenet:  

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

El kell olvasni:

  • új operátor vs newInstance() metódus Java-ban  
  • Reflexiók Java nyelven