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.
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
JavaObservaçã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.
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