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 dadosJava
// 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