logo

Operador instanceof vs método isInstance() em Java

O instância de operador e isInstância() método ambos são usados ​​para verificar a classe do objeto. Mas a principal diferença surge quando queremos verificar a classe de objetos dinamicamente, então o método isInstance() funcionará. Não há como fazer isso pelo operador instanceof.

O método isInstance é equivalente ao operador instanceof. O método é usado no caso de objetos serem criados em tempo de execução usando reflexão. A prática geral diz que se o tipo deve ser verificado em tempo de execução, use o método isInstance, caso contrário, o operador instanceof poderá ser usado.



O operador instanceof e O método isInstance() retorna um valor booleano. O método isInstance() é um método da classe Class em java, enquanto instanceof é um operador. 

Considere um exemplo:

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

Saída: 



true

Agora, se quisermos verificar a classe do objeto em tempo de execução, devemos usar isInstância() método.

estrutura de dados
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);  } } 

Saída: 

true false true

Observação: O operador instanceof lança erro em tempo de compilação (tipos de operandos condicionais incompatíveis) se verificarmos o objeto com outras classes que ele não instancia.



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

Saída :  

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

Deve ler:

  • novo operador vs método newInstance() em Java  
  • Reflexões em Java