• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Operadores no Java – instanceof

November 21, 2016 by Mauda Leave a Comment

Conteúdo do Post:
  1. Operador instanceof
  2. Explicação do Exemplo
  3. Precedência dos Operadores
  4. finnaly{

Olá Pessoal, tudo bom?

Continuando nossa descrição básica sobre os operadores no Java, hoje é dia de falar sobre o operador instanceof. A sexta parte desse artigo se encontra aqui. Confira na continuação desse artigo sobre o operador instanceof:

Operador instanceof

Esse operador realiza a comparação do tipo de um objeto com um determinado tipo. Ou seja, é possível utilizar esse operador para testar se um objeto é do tipo de uma classe, uma subclasse, uma interface ou enum:

Operador Descrição
instanceof Operador que realiza a comparação de tipos de instâncias de um objeto

Para conseguir realizar uma classe de exemplo que trabalha com o operador instanceof, temos que criar algumas classes (ClasseMae e ClasseFilha), interface (MinhaInterface) e enum (MeuEnum) para auxiliar:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package br.com.mauda.operadores;
 
class ClasseMae {
}
 
class ClasseFilha extends ClasseMae implements MinhaInterface {
}
 
interface MinhaInterface {
}
 
enum MeuEnum implements MinhaInterface {
MINHA_CONSTANTE_1
}
 
public class OperadorInstanceof {
public static void main(String[] args) {
ClasseMae obj1 = null;
System.out.println("obj1 instanceof Object: " + (obj1 instanceof Object));
System.out.println("obj1 instanceof ClasseMae: " + (obj1 instanceof ClasseMae));
System.out.println("obj1 instanceof ClasseFilha: " + (obj1 instanceof ClasseFilha));
System.out.println("obj1 instanceof MinhaInterface: " + (obj1 instanceof MinhaInterface));
ClasseMae obj2 = new ClasseMae();
System.out.println("\nobj2 instanceof Object: " + (obj2 instanceof Object));
System.out.println("obj2 instanceof ClasseMae: " + (obj2 instanceof ClasseMae));
System.out.println("obj2 instanceof ClasseFilha: " + (obj2 instanceof ClasseFilha));
System.out.println("obj2 instanceof MinhaInterface: " + (obj2 instanceof MinhaInterface));
ClasseMae obj3 = new ClasseFilha();
System.out.println("\nobj3 instanceof Object: " + (obj3 instanceof Object));
System.out.println("obj3 instanceof ClasseMae: " + (obj3 instanceof ClasseMae));
System.out.println("obj3 instanceof ClasseFilha: " + (obj3 instanceof ClasseFilha));
System.out.println("obj3 instanceof MinhaInterface: " + (obj3 instanceof MinhaInterface));
ClasseFilha obj4 = new ClasseFilha();
System.out.println("\nobj4 instanceof Object: " + (obj4 instanceof Object));
System.out.println("obj4 instanceof ClasseMae: " + (obj4 instanceof ClasseMae));
System.out.println("obj4 instanceof ClasseFilha: " + (obj4 instanceof ClasseFilha));
System.out.println("obj4 instanceof MinhaInterface: " + (obj4 instanceof MinhaInterface));
MeuEnum e1 = null;
System.out.println("\ne1 instanceof Object: " + (e1 instanceof Object));
System.out.println("e1 instanceof MeuEnum: " + (e1 instanceof MeuEnum));
System.out.println("e1 instanceof MinhaInterface: " + (e1 instanceof MinhaInterface));
MeuEnum e2 = MeuEnum.MINHA_CONSTANTE_1;
System.out.println("\ne2 instanceof Object: " + (e2 instanceof Object));
System.out.println("e2 instanceof MeuEnum: " + (e2 instanceof MeuEnum));
System.out.println("e2 instanceof MinhaInterface: " + (e2 instanceof MinhaInterface));
}
}

O resultado da execução dessa classe será o seguinte:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
obj1 instanceof Object: false
obj1 instanceof ClasseMae: false
obj1 instanceof ClasseFilha: false
obj1 instanceof MinhaInterface: false
 
obj2 instanceof Object: true
obj2 instanceof ClasseMae: true
obj2 instanceof ClasseFilha: false
obj2 instanceof MinhaInterface: false
 
obj3 instanceof Object: true
obj3 instanceof ClasseMae: true
obj3 instanceof ClasseFilha: true
obj3 instanceof MinhaInterface: true
 
obj4 instanceof Object: true
obj4 instanceof ClasseMae: true
obj4 instanceof ClasseFilha: true
obj4 instanceof MinhaInterface: true
 
e1 instanceof Object: false
e1 instanceof MeuEnum: false
e1 instanceof MinhaInterface: false
 
e2 instanceof Object: true
e2 instanceof MeuEnum: true
e2 instanceof MinhaInterface: true

Explicação do Exemplo

Esse exemplo necessita de um pouco mais de explicação. Primeiramente criamos uma classe básica chamada ClasseMae e uma filha desta classe ClasseFilha, esta também implementa a interface MinhaInterface. Por fim temos um enum que implementa a interface MinhaInterface também.

Criamos um obj1, do tipo ClasseMae o qual é inicializado com o valor null. Perceba que todos as comparações com o instanceof retornam false. Ou seja, enquanto uma variável for nula, ela nunca será instância de nenhuma classe, interface. Se você verificar a variável e1, a execução desta será igual a da obj1, ou seja, não será instância de nenhum tipo.

Criamos um obj2, do tipo ClasseMae, o qual é inicializado com uma instância de ClasseMae. Essa classe não implementa a interface MinhaInterface e não é ClasseFilha, logo os últimos itens da avaliação do instanceof serão falsos. Lembre-se toda classe e enum extende, mesmo que implicitamente, a classe java.lang.Object, logo todos as instâncias não nulas serão instanceof Object.

O obj3, do tipo ClasseMae, é inicializado com uma instância de ClasseFilha, a qual estende a ClasseMae, logo todas as validações são verdadeiras. O mesmo se aplica para o obj4, só que este objeto é do tipo ClasseFilha.

O enum e1 é inicializado com valor null. Logo nenhuma validação será verdadeira. Já o enum e2 é inicializado com uma constante de MeuEnum, assim todas as validações são verdadeiras.

Caso você tente comparar uma instância de enum com uma classe ou o contrário:

Java
1
System.out.println("e1 instanceof ClasseMae: " + (e1 instanceof ClasseMae));

Ocorrerá um erro de compilação, com a seguinte mensagem:

Incompatible conditional operand typesMeuEnum and ClasseMae

Precedência dos Operadores

Continuando a formular a tabela de precedência, agora seguem o operador instanceof, o qual está junto com os operadores relacionais, assim verifique a tabela abaixo:

Ordem Tipo de Operador Precedência
1 Pós Fixo expr++   expr–
2 Pré fixo e Unário    ++expr   –expr   +expr   -expr   !
3 Multiplicativo *    /    %
4 Aditivo +    –
5 Relacional >    >=    <=   <    instanceof
6 Igualdade ==    !=
7 AND Lógico &&
8 OR Lógico ||
9 Atribuição =   +=   -=   *=   /=   %=

finnaly{

Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

Filed Under: Java, Operadores Tagged With: class, Enum, extends, implements, instanceof, interface

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in