Buscar

e-book-linguagem-java-o-basico-da-linguagem-professor-rogerio-araujo

Prévia do material em texto

2
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Sumário
APRESENTAÇÃO ..............................................................................................................3
VISÃO GERAL DO DESENVOLVIMENTO COM JAVA ....................................................4
VARIÁVEIS EM JAVA ........................................................................................................20
TIPOS PRIMITIVOS ...........................................................................................................27
OPERADORES ..................................................................................................................39
DECLARAÇÕES DE CONTROLE DE FLUXO .................................................................68
ARRAYS .............................................................................................................................94
RESUMO ............................................................................................................................103
MAPAS MENTAIS ..............................................................................................................112
GABARITO ........................................................................................................................146
REFERÊNCIAS ..................................................................................................................148
www.grancursosonline.com.br
3
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Apresentação
Fala, meu (minha) consagrado(a) concurseiro(a)? Tudo beleza com você?
Sou o professor Rogério Araújo. Sou formado em Bacharelado em Ciência da Computa-
ção pela Universidade Estadual do Piauí (UESPI), especialista em Governança em TI pela 
Unieuro e em Desenvolvimento de Sistemas Baseados em Software Livre pela Universidade 
da Amazônia (UNAMA). Atualmente, estou cursando o MBA Data Science e Analytics pela 
USP/Esalq. Possuo as certificações Certified ScrumMaster, COBIT 4.1 Foundation Certified 
e Sun Certified Associate for J2SE (SCJA). Sou autor de artigos no site www.rogeraoaraujo.
com.br e no blog do Gran Cursos Online (https://blog.grancursosonline.com.br/author/roge-
rio-araujo/) e tenho meu canal no Youtube (www.youtube.com/rgildoaraujo). Sou professor de 
cursos na área de Tecnologia da Informação para concursos.
Quanto à minha carreira como servidor público, atualmente trabalho na Secretaria do 
Tesouro Nacional, vinculada ao Ministério da Economia, exercendo o cargo de Auditor Federal 
de Finanças e Controle, na área de Governança de TI. Também já passei pelo Tribunal Regio-
nal Federal (TRF) 1ª Região, exercendo o cargo de Analista Judiciário, na especialidade de 
Analista de Sistemas, e pelo Ministério Público Federal (MPF), como Técnico de Informática.
Como concurseiro, fui aprovado em alguns concursos, tais como, em ordem decrescente de 
ano, STN 2013 (nomeado e onde estou hoje), TST 2012 (nomeado), TSE 2012 (aproveitado e 
nomeado no TRF 1ª Região), TRE/PE 2011 (classificado), TRT 19ª Região 2011 (classificado), 
MPU 2010 (classificado), STM 2010 (classificado), SERPRO 2008 (nomeado), TRT 18ª Região 
2008 (classificado), MPU 2006 (classificado), BACEN 2005 (classificado), TRE/MA 2005 (classi-
ficado), TRT 16ª Região 2005 (classificado), TCE/PI 2005 (classificado) e MPU 2004 (nomeado).
Professor Rogerão Araújo – @profRogeraoAraujo
www.grancursosonline.com.br
http://www.rogeraoaraujo.com.br
http://www.rogeraoaraujo.com.br
https://blog.grancursosonline.com.br/author/rogerio-araujo/
https://blog.grancursosonline.com.br/author/rogerio-araujo/
http://www.youtube.com/rgildoaraujo
4
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
1. VISÃO GERAL DO DESENVOLVIMENTO COM JAVA
1.1. COMPILAÇÃO DOS ARQUIVOS.JAVA E INTERPRETAÇÃO E EXECUÇÃO 
DOS ARQUIVOS.CLASS
Na linguagem de programação Java:
• O código-fonte é escrito em arquivos texto com a extensão.java.
• Esses arquivos são então compilados em arquivos.class pelo compilador javac;
• Um arquivo.class:
 – Não contém código nativo para um processador específico;
 – Contém bytecodes, que é uma linguagem da Máquina do Virtual Java (JVM);
 – É interpretado e executado pelo comando java para criar uma instância da JVM.
Detalhando o processo, temos duas fases (figuras 1.1 e 1.2):
• Fase de compilação das classes Java;
• Fase de interpretação e execução dos bytecodes.
Na fase de compilação, compilamos nossas classes Java (arquivos texto de exten-
são.java) com um compilador Java (chamado pelo comando javac seguido do nome do 
arquivo.java) que vem junto com um JDK (kit de desenvolvimento Java). O resultado da com-
pilação das classes Java são arquivos de extensão.class que contêm bytecodes.
ATENÇÃO
Os bytecodes gerados a partir de uma classe são únicos: não estão em linguagem de 
máquina específica de uma plataforma.
Temos agora a fase de interpretação e execução dos bytecodes (contidos nos arqui-
vos de extensão .class). Nessa fase, os bytecodes são interpretados e executados pela 
Máquina Virtual Java (JVM) no cliente, onde nossa aplicação irá rodar. Usamos o comando 
java seguido do nome do arquivo.class para a interpretação e execução dos bytecodes.
Para termos a nossa JVM, é necessário instalar no cliente um ambiente de execução 
Java (JRE) para o tipo específico da plataforma desse cliente. O JRE conterá a JVM.
www.grancursosonline.com.br
5
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 1.1: Compilação das classes Java e interpretação e execução dos bytecodes.
ATENÇÃO
O JRE traz consigo a JVM. Esta interpretará e executará os bytecodes (através do coman-
do java). Para cada plataforma onde iremos rodar nossa aplicação, teremos JRE e JVM 
específicos daquela plataforma.
Não precisamos recompilar a aplicação para que possamos rodá-la em plataformas diferen-
tes. Compilamos uma vez nossas classes para termos um conjunto único de bytecode e cada JVM 
para uma plataforma específica saberá interpretar e executar esse conjunto nessa plataforma.
Assim, meu amigo, a tecnologia Java nos oferece a portabilidade! Escreva sua aplicação 
apenas uma vez e execute-a em qualquer lugar!
www.grancursosonline.com.br
6
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 1.2: Portabilidade com a tecnologia Java.
Figura 1.3: Arquivos.java e.class.
 
www.grancursosonline.com.br
7
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
1. (FGV/2018/BANESTES/ANALISTA EM TECNOLOGIA DA INFORMAÇÃO/SUPORTE E 
INFRAESTRUTURA) Considere a compilação de um ou mais programas por meio da 
linha de comando, num ambiente Java. Nesse caso, o comando que está corretamente 
formado para esse fim é:
a. compile teste.java –type java
b. java teste.java
c. javac *.java
d. jvm Teste1.java teste2.java
e. parse java teste.java
COMENTÁRIO
Compilamos nossas classes Java (arquivos texto de extensão.java) com um compi-
lador Java:
javac *.java
O resultado da compilação das classes Java são arquivos de extensão.class que contêm 
bytecodes.
2. (FGV/2013/TJ/AM/ASSISTENTE JUDICIÁRIO/PROGRAMADOR) Observe a figura a 
seguir, que representa o ambiente Java.
O arquivo.class não contém código que é nativo para seu processador, mas sim a lin-
guagem de máquina da Java Virtual Machine (Java VM), conhecida por
a. framecode.
b. bytecode.
c. bitcode.
d. zipcode.
e. microcode.
www.grancursosonline.com.br
8
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
COMENTÁRIO
O arquivo.class não contém código nativo para um processador específico. Ele contém 
bytecodes, que é uma linguagem da Máquina do Virtual Java (JVM) e é interpretado e exe-
cutado pelo comando java para criar uma instância da JVM.
3. (FGV/2012/SENADO FEDERAL/ANALISTA LEGISLATIVO/ANÁLISEDE SUPORTE 
DE SISTEMAS) Observe a figura abaixo, associada à linguagem Java.
Para permitir que um mesmo programa seja executado em vários sistemas operacio-
nais, a plataforma java gera códigos genéricos *.class e os traduz para o código da 
máquina local, *.exe ou *.bin, somente no momento da execução.
Nesse contexto, os códigos específicos para a máquina virtual Java, e não para a má-
quina local, recebem o nome de:
a. microcode.
b. scriptcode.
c. framecode.
d. bytecode.
e. javacode.
www.grancursosonline.com.br
9
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
COMENTÁRIO
A questão trouxe uma figura parecida com a figura 1.2. Na linguagem de programação Java:
• O código-fonte é escrito em arquivos texto com a extensão.java;
• Esses arquivos são então compilados em arquivos.class pelo compilador javac;
• Um arquivo.class:
 – Não contém código nativo para um processador específico;
 – Contém bytecodes, que é uma linguagem da Máquina do Virtual Java (JVM); e
 – É interpretado e executado pelo comando java para criar uma instância da JVM.
Na imagem, o JDK contém o compilador Java (chamado pelo comando javac). Também te-
mos o JRE na imagem. Nesse caso, como sabemos, o JRE traz a JVM, que irá interpretar 
e executar os bytecodes.
Só uma observação: o resultado da compilação em bytecodes de um arquivo.java é um 
arquivo.class, e não arquivo.jar, como está na imagem. Os arquivos.jar são pacotes que 
contêm vários arquivos.class.
Agora, respondendo a questão, ela fala dos bytecodes.
1.2. JDK, JRE, JVM E JIT
O Java Development Kit (JDK) é o conjunto de ferramentas necessárias para realizar o 
desenvolvimento de aplicações Java. O JDK inclui:
• Java Runtime Environment (JRE); e
• Ferramentas de programação:
 – javac: compilador;
 – java: interpretador;
 – appletviewer: visualizador de applets;
 – javadoc: gerador de documentação;
 – jar: empacotador de aplicações.
Por sua vez, o Java Runtime Environment (JRE) é a plataforma Java. Ele é composto 
por dois componentes:
• Java Virtual Machine (JVM);
• Java Application Programming Interface (Java API):
 – É uma biblioteca de componentes que possui vários recursos úteis e é utilizada para 
execução de aplicações Java.
www.grancursosonline.com.br
10
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
ATENÇÃO
É necessário instalar um JRE específico de uma plataforma, pois junto com ele vem uma JVM 
que saberá lidar com essa plataforma e conseguirá executar aplicações Java naquele ambiente.
Explicando a figura 1.4, temos:
• Na camada mais baixa, temos o hardware específico;
• Na camada mais acima, temos a plataforma Java ou o JRE;
 – Junto com o JRE vem a JVM e a API Java; e
• Na última camada, temos a nossa aplicação Java.
Figura 1.4: Onde uma classe Java é executada.
Agora chegou a vez de conhecermos a Java Virtual Machine (JVM). A máquina virtual 
Java é a peça-chave para fornecer capacidade de multiplataforma para as aplicações 
Java. É o segredo da frase “Write once, run everywhere”.
A JVM está disponível em muitos sistemas operacionais diferentes. Com isso, os mesmos 
arquivos .class são capazes de funcionar nesses sistemas operacionais: Microsoft Windows, 
Solaris OS, Linux, Mac OS etc.
Essa máquina virtual pode ser desenvolvida por qualquer organização, desde que siga as 
especificações para construção de uma JVM.
Ela é responsável por interpretar e executar o bytecode. Também possui a função de ser 
provedora de formas e meios de o aplicativo conversar com o sistema operacional.
No tempo de execução, a JVM:
• carrega os arquivos de classe;
• determina a semântica de cada bytecode individual; e
• executa a computação apropriada.
www.grancursosonline.com.br
11
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Mas nem tudo são flores. O uso adicional do processador e da memória durante a inter-
pretação significa que um aplicativo Java executa mais lentamente do que um aplicativo 
nativo. Nesse caso, para ajudar na melhora do desempenho de aplicativos Java no tempo de 
execução, utilizamos o Compilador Just-in-time (JIT).
O JIT é um componente do JRE que ajuda a melhorar o desempenho de programas Java, 
compilando bytecodes no código de máquina nativo no tempo de execução.
O compilador JIT é ativado quando um método Java é chamado e compila os bytecodes 
desse método no código de máquina nativo. Quando um método tiver sido compilado, a JVM 
chama o código compilado desse método diretamente, em vez de interpretá-lo.
ATENÇÃO
Teoricamente, se a compilação não tiver requerido tempo de processador e uso de memó-
ria, compilar cada método pode permitir que a velocidade do programa Java se aproxime 
àquela de um aplicativo nativo.
Resumindo, temos (figura 1.5):
• A JVM é o coração da ideia da portabilidade usando a tecnologia Java;
• Ela vem junto com o JRE, que também é composto;
 – pela API Java; e
 – pelo Compilador JIT.
• O JRE deve ser instalado no ambiente dos usuários onde nossas aplicações 
Java rodarão.
• Para os desenvolvedores, instala-se o JDK;
 – Que, além de trazer o JRE, inclui, entre outras ferramentas, o compilador de classes 
para bytecodes.
www.grancursosonline.com.br
12
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 1.5: JDK, JRE, JVM e Compilador JIT.
De forma geral, a plataforma JSE possui a seguinte estrutura (figura 1.6):
• O JDK, que:
 – vai da linguagem Java até a JVM;
 – também inclui ferramentas e APIs para desenvolvimento de aplicações.
• O JRE, que vai da API JSE até a JVM.
• Inúmeras plataformas onde podemos instalar:
 – JDK, caso queiramos desenvolver utilizando nossa plataforma preferida; ou
 – JRE, onde as aplicações serão executadas.
Vamos ver agora um exemplo de classe Java?
www.grancursosonline.com.br
13
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 1.6: Plataforma Java Standard Edition.
Exemplo:
public class PrimeiroExemplo {
public static void main(String[] args) {
 System.out.println(“As árveres somos nozes e o jardinheiro 
 é Zezus!”);
}
}
Resultado da execução do exemplo acima:
As árveres somos nozes e o jardinheiro é Zezus!
No exemplo acima, temos uma classe Java executável chamada PrimeiroExemplo.
A classe possui um método especial: método main. Esse método transforma uma classe 
Java em uma classe executável. Entretanto, nem todas as classes precisam desse método.
Para haver a compilação da nossa classe em bytecodes, utilizamos o comando javac:
javac PrimeiroExemplo.java
Sendo que o nome-classe deve ser o mesmo nome do arquivo.
Para haver a interpretação e execução do arquivo .class resultante da compilação ante-
rior utilizando o comando java:
java PrimeiroExemplo
www.grancursosonline.com.br
14
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Ao executarmos a classe, temos a seguinte saída: As árveres somos nozes e o jardi-
nheiro é Zezus!
DIRETO DO CONCURSO
4. (FGV/2016/COMPESA/ANALISTA DE GESTÃO/ADMINISTRADOR DE BANCO DE 
DADOS/ADAPTADO) Sobre as características da linguagem Java, analise a afirmati-
va a seguir.
Requer a existência de uma máquina virtual para rodar.
COMENTÁRIO
A JVM é responsável por interpretar e executar os bytecodes de uma aplicação Java. Tam-
bém possui a função de ser provedora de formas e meios de a aplicação conversar com o 
sistema operacional.
5. (FGV/2010/FIOCRUZ/TECNOLOGISTA EM SAÚDE/ENGENHARIA DE PRODUÇÃO) 
Selecione a opção correspondente a uma linguagem de programação multiplataforma:
a. C#
b. Delphi
c. Fox Pro
d. Java
e. Visual Basic
COMENTÁRIO
A JVM é a peça-chave para fornecer capacidade de multiplataforma para as aplicações 
Java. É o segredo da frase “Write once, run everywhere”.
Ela está disponível em muitos sistemas operacionais diferentes. Com isso, os mesmos ar-
quivos .class são capazes de funcionar nesses sistemas operacionais:Microsoft Windows, 
Solaris OS, Linux, Mac OS etc.
E essa ideia de portabilidade é oferecida pela linguagem Java, o que faz a letra “d” ser o 
nosso gabarito.
www.grancursosonline.com.br
15
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
1.3. Fases de uma aplicação Java
Figura 1.7: Fases de uma aplicação Java.
São cinco fases pelas quais passa uma aplicação Java (figura 1.7):
• edição;
• compilação;
• carregamento;
• verificação; e
• execução.
Figura 1.8: Fases edição e compilação de uma aplicação Java.
www.grancursosonline.com.br
16
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Explicando as duas primeiras fases (figura 1.8):
• Edição:
 – Primeiro, editamos nossas classes;
 – Provavelmente utilizaremos uma IDE como NetBeans ou Eclipse;
 – Com a edição delas, que são arquivos com extensão.java, as classes são salvas na 
memória secundária.
• Compilação:
 – O compilador irá pegar os arquivos.java e os compilará, gerando os bytecodes, 
criando assim arquivos com extensão .class;
 – Os arquivos .class também são armazenados na memória secundária.
As três últimas fases são (figura 1.9):
• Carregamento:
 – O programa deve ser primeiramente colocado na memória antes de ser executado;
 – Isso é feito pelo carregador de classe, que pega o arquivo (ou arquivos) .class que 
contém os bytecodes e o transfere para a memória.
• Verificação:
 – Antes que o interpretador Java execute os bytecodes, eles são verificados pelo veri-
ficador de bytecode;
 – Isso assegura que os bytecodes são válidos e não violam as restrições de segu-
rança do Java.
• Execução:
 – Finalmente, a JVM lê os bytecodes e os interpreta para uma linguagem que o com-
putador pode entender (linguagem de máquina);
 – Possivelmente armazenando valores dos dados enquanto executa o programa.
www.grancursosonline.com.br
17
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 1.9: Fases carregamento, verificação e execução de uma aplicação Java.
 
O PULO DO GATO
Para ajudar a memorizar as fases, podemos usar o mnemômico ECo CaVEx: (E) edição, 
(Co) compilação, (Ca) carregamento, (V) verificação e (Ex) execução.
A tabela 1.1 traz um resumo das fases de uma aplicação Java.
Tabela 1.1: Resumo da descrição das fases de uma aplicação Java.
Fase Descrição
Edição O programa é criado no editor e armazenado em disco.
Compilação O compilador cria bytecodes e os armazena em disco.
Carregamento O carregador de classe coloca bytecodes na memória principal.
Verificação
O verificador de bytecodes confirma que todos os bytecodes são 
válidos e não violam restrições de segurança de Java.
Execução
A JVM lê os bytecodes e os interpreta para uma linguagem que o 
computador pode entender (linguagem de máquina), possivelmente 
armazenando valores dos dados enquanto executa o programa.
www.grancursosonline.com.br
18
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
DIRETO DO CONCURSO
6. (FGV/2010/CODESP/SP/ANALISTA DE SISTEMAS/TIPO 1) A figura abaixo mostra as 
cinco fases para execução de programa Java
O processo de execução ocorre da seguinte forma:
• Na edição, o programa é criado no editor e armazenado em disco.
• Na compilação, o compilador gera um PRODUTO e o armazena em disco.
• Na carga, o carregador de classe coloca o PRODUTO na memória.
• Na verificação, o verificador checa que o PRODUTO é válido e não viola as restrições 
de segurança do Java.
• Na interpretação, o interpretador lê o PRODUTO e faz a tradução para uma lingua-
gem que o computador pode entender, possivelmente armazenando valores de dados 
enquanto executa o programa.
Nesse processo, PRODUTO representa o seguinte componente:
a. Bytecode.
b. Framework.
c. Firmware.
d. Framecode.
e. Bytework.
www.grancursosonline.com.br
19
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
COMENTÁRIO
Uma aplicação Java passa pelas seguintes fases:
• Edição:
 – O programa é criado no editor e armazenado em disco.
• Compilação:
 – O compilador cria bytecodes e os armazena em disco.
• Carregamento:
 – O carregador de classe coloca bytecodes na memória principal.
• Verificação:
 – O verificador de bytecodes confirma que todos os bytecodes são válidos e não 
violam restrições de segurança de Java
• Execução:
 – A JVM lê os bytecodes e os interpreta para uma linguagem que o computador pode 
entender (linguagem de máquina), possivelmente armazenando valores dos dados 
enquanto executa o programa.
Então, a palavra PRODUTO citada na questão representa os bytecodes, ou seja, letra “a”.
www.grancursosonline.com.br
20
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
2. VARIÁVEIS EM JAVA
2.1. INTRODUÇÃO
Os programas de computadores são compostos por dados (variáveis) e código 
(instruções).
As variáveis são recipientes (endereços de memória) que armazenam informações de 
um determinado tipo, para que seja possível a manipulação delas pelos programas.
Também temos as constantes:
• As informações contidas nas variáveis podem ser modificadas no decorrer do programa;
• Enquanto as informações relacionadas a constantes não podem ser modificadas 
dessa maneira.
Faremos uma analogia entre variáveis e constantes com garagens de carros:
• Os dados são os carros.
• Tanto as variáveis quanto as constantes são as garagens:
 – As variáveis são garagens com rotatividade de carros de mesma marca e de mesmo 
modelo, mas nem sempre teremos o mesmo carro estacionado.
 – As constantes, por sua vez, são garagens de carros de um colecionador, onde cada 
garagem recebe um carro de mesma marca e de mesmo modelo: uma vez um carro 
estacionado na garagem, ele não sai mais.
• O nome das variáveis e das constantes é a identificação das garagens;
• O tipo das variáveis e das constantes define qual a marca e qual o modelo de carros 
as garagens podem receber.
Se definirmos que, em nossas garagens, caibam apenas carros do tipo Fiat Uno, para 
nossa tristeza, não poderemos estacionar uma Dodge Ram. Definimos o tipo da garagem 
para receber modelo de carro de pequeno porte, e não um modelo de carro maior. Seria 
como tentarmos atribuir um valor de ponto flutuante (Dodge Ram) para uma variável (gara-
gem) do tipo int (Fiat Uno).
2.2. DECLARAÇÃO DE VARIÁVEIS EM JAVA
Agora vamos entender as variáveis em Java.
Ao declararmos uma variável, determinamos:
• seu nome;
• seu tipo; e
• um possível valor inicial.
www.grancursosonline.com.br
21
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 2.1: Esquema da declaração de variáveis em Java.
O valor literal é o valor que uma variável pode receber de acordo com seu tipo. É a 
nossa história da garagem para receber um Fiat Uno e que não pode receber uma Dodge 
Ram. Na figura 2.1, o valor 15 pode ser recebido perfeitamente pela variável x que do tipo int, 
pois esse valor está no rol de valores recebidos por uma variável desse tipo.
ATENÇÃO
Para identificarmos onde uma variável foi declarada, basta vermos no código onde foi de-
finido seu tipo (int x = 15;).
As variáveis em Java também são chamadas de campos.
Temos quatro classificações de variáveis na linguagem Java:
• Variáveis de instância;
• Variáveis de classe;
• Variáveis locais;
• Parâmetros.
As variáveis de instância, também chamadas de campos não estáticos, são variáveis 
que mantêm informações específicas e individuais de cada objeto (ou instância) de uma 
classe. Quando instanciamos uma classe, ou seja, quando criamos um objeto a partir dela, 
os valores das variáveis de instância desse objeto pertencem apenas a ele.
www.grancursosonline.com.br
22
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
O escopo dessas variáveis é de classe, ou seja, ao declararmos uma variável de classe, 
ela poderá ser vista em todoo corpo dessa classe (figura 2.2).
As variáveis de classe são também chamadas de campos estáticos. Elas possuem o 
modificador static. Esse modificador informa ao compilador que haverá apenas uma cópia 
da variável, não importando quantas instâncias a classe tenha.
As variáveis de classe são variáveis que mantêm informações da classe e não de instân-
cias dessa classe e o escopo delas também é de classe (figura 2.2).
Figura 2.2: Escopo das variáveis de classe e de instância.
 
ATENÇÃO
Para variáveis de classe e de instância, o escopo delas é de classe: isso significa que elas 
são enxergadas em qualquer ponto dentro da classe, seja dentro de um método ou dentro 
de um controle de fluxo qualquer dentro do limite da classe.
As variáveis locais são variáveis criadas dentro do escopo de construtores, de méto-
dos ou de controle de fluxos. Essas variáveis possuem escopo dessas estruturas, ou seja, 
são vistas apenas dentro da estrutura onde foram declaradas (figura 2.3), ou seja, as variá-
veis locais podem possuir escopo de construtor, método ou controle de fluxo.
Apenas antecipando, um construtor nada mais é que um método especial com o nome 
igual ao nome da classe e que não possui nenhum tipo de retorno onde podemos fazer devi-
das inicializações de variáveis de instância quando criamos um objeto de uma classe, ou 
seja, quando instanciamos uma classe.
www.grancursosonline.com.br
23
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 2.3: Escopo das variáveis locais.
Os parâmetros são valores passados para construtores, para métodos ou para cláusula 
catch em um bloco try-catch, cada vez que uma exceção é capturada. A declaração dos parâ-
metros é feita na assinatura dessas estruturas e eles possuem escopo dessas estruturas, ou 
seja, são vistos apenas dentro da estrutura onde foram declarados (figura 2.5): construtor, 
método ou cláusula catch em um bloco try-catch, cada vez que uma exceção é capturada.
Figura 2.4: Escopo dos parâmetros.
www.grancursosonline.com.br
24
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Quando declaramos variáveis, como já vimos, citamos seu tipo, seu nome e possivel-
mente um valor inicial:
int x = 15;
Normalmente, em cada linha, temos uma declaração de variável, porém, podemos ter múl-
tiplas declarações em uma linha apenas, onde usamos vírgulas para separar as declarações:
int x = 15, y = 10;
Recomenda-se ter uma declaração por linha. Fica muito mais fácil de manter os códigos.
Importante dizer que a declaração de uma variável pode ser feita em qualquer lugar 
do código:
int x = 15;
System.out.println(x);
int y = 10;
Entretanto, se quiser, ao invés de “x”, imprimir o valor de “y”, no nosso exemplo, eu deve-
ria declarar “y” antes do System.out.println:
int x = 15;
int y = 10;
System.out.println(y);
Para declararmos uma variável de classe, basta usar o modificador static:
public static int quantidadePortas = 2;
Quando desejo que uma variável tenha apenas um valor e que esse valor não possa ser 
modificado, ou seja, que seja uma constante, utilizo o modificador final. Com isso, teremos 
uma variável final. Podemos aplicar esse modificador nos seguintes tipos de variáveis em Java:
• Variáveis de classe;
• Variáveis de instância;
• Variáveis locais;
• Parâmetros.
Exemplos:
public static final String NOME_CLASSE = “Pessoa”;
final int x = 3;
public nomeMetodo(final int y) {
...
}
www.grancursosonline.com.br
25
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Para finalizarmos, deixarei um exemplo de classe, tendo variável de instância, variável de 
classe, variável final, parâmetro e variável local:
public class Main {
private int variavelInstancia = 15;
private static int variavelClasse = 20;
private static final int variavelFinal = 25;
public void metodo(int parametro) {
int variavelLocal = 35;
System.out.println(variavelInstancia);
System.out.println(variavelClasse);
System.out.println(variavelFinal);
System.out.println(parametro);
System.out.println(variavelLocal);
// A variavel i é uma variável local da estrutra de repetição. Ela 
só pode ser vista dentro dessa estrutura.
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
public static void main(String[] args) {
Main vo = new Main();
vo.metodo(30);
}
Resultado da execução do exemplo acima:
15
20
25
30
35
0
1
2
3
4
www.grancursosonline.com.br
26
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
DIRETO DO CONCURSO
7. (FGV/2018/BANESTES/ANALISTA EM TECNOLOGIA DA INFORMAÇÃO/SUPORTE E 
INFRAESTRUTURA) Analise o código Java a seguir.
A execução desse código provoca:
a. a exibição dos números 012.
b. a exibição dos números 0122.
c. a exibição dos números 0123.
d. erro em tempo de compilação.
e. erro em tempo de execução.
COMENTÁRIO
A classe Test é uma classe pública. Ela possui o método chamado method(). É um método 
público, sem parâmetros e não retorna nada (void). Esse método possui uma estrutura de 
repetição for. Dentro dela, há uma variável local i declarada dentro da estrutura (int i = 0). 
Ou seja, não podemos citar essa variável fora da estrutura de repetição.
Veja que, após a estrutura for, há uma linha onde se imprime o valor da variável local i no 
console do usuário. Porém, essa variável tem escopo apenas dentro da estrutura for, o que 
faz gerar um erro em tempo de compilação, o que faz a letra “d” ser nosso gabarito.
www.grancursosonline.com.br
27
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
3. TIPOS PRIMITIVOS
3.1. Introdução
A linguagem de programação Java é uma linguagem:
• de tipagem estática;
• fortemente tipada.
O que isso significa?
Quando se diz que uma linguagem é de tipagem estática, significa dizer que temos de 
declarar o tipo da variável, pois esse tipo deve ser conhecido no tempo de compilação:
int x = 15;
No nosso exemplo, declaramos a variável x com o tipo int.
Já o conceito de linguagem fortemente tipada é mais relacionado ao valor que uma 
variável pode receber de acordo com o tipo dela, ou seja, quando há a exigência de que os 
valores armazenados em uma variável sejam compatíveis com o tipo dela:
int x = 15;
No nosso exemplo, a variável x pode receber o valor 15, pois esse valor está entre os 
aceitos para o tipo int.
Figura 3.1: Linguagem estática e fortemente tipada.
Juntando os dois conceitos, temos o conceito da tipagem estaticamente forte que ajuda 
a detectar erros em tempo de compilação.
Como vimos, atribuir o valor 15 para uma variável do tipo int: perfeito! Se eu fiz uma gara-
gem para caber um Fiat Uno e eu estacionei um, então está tudo certo. Agora, atribuir um 
valor de ponto flutuante para uma variável do tipo int: OPA!!! Temos um problema detectado 
pelo compilador: esse valor não é compatível com o tipo int.
Se minha garagem comporta apenas carros do porte do Fiat Uno, como vou comprar uma 
Dodge Ram e tentar estacionar lá? Claro, apenas se eu serrar algumas partes desse carrão 
para ele caber na garagem. Chamamos isso de casting: moldamos o valor de ponto flutuante 
para ficar compatível com o tipo inteiro, porém, perderemos as casas decimais, assim como 
perdemos partes da Dodge Ram quando a serramos.
www.grancursosonline.com.br
28
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Se se atribuir uma String para uma variável do tipo int, nem o casting resolve essa 
atribuição.
ATENÇÃO
Podemos encontrar fontes citando que uma linguagem fortemente tipada é uma linguagem 
em que os tipos das variáveis são conhecidos em tempo de compilação. Esse conceito é 
o da linguagem ser de tipagem estática. O conceito de fortemente tipada é relacionado ao 
valor que uma variável pode receber em relação ao tipo dela.
3.2. Tipos primitivos na linguagem Java
Em Java, nós temos oito tipos primitivos. Podemos dividiros tipos em dois grandes 
grupos: tipos numéricos e o tipo boolean, que é um tipo primitivo propriamente dito. Dentro 
dos tipos numéricos, temos duas subdvisões: tipos integrais e tipos de ponto flutuante.
Nos tipos integrais, temos os tipos byte, short, int, long e char.
Nos de ponto flutuante, temos float e double.
O tipo boolean aceita apenas dois valores: true e false. true e false são os únicos valo-
res aceitos por variáveis do tipo boolean.
Tabela 3.1: Sobre os tipos primitivos na linguagem Java – Parte I.
Tipo Bits Possui sinal Tipo de valor
byte 8 Sim Inteiro
short 16 Sim Inteiro
int 32 Sim Inteiro
long 64 Sim Inteiro
boolean 1? Não Boolean
char 16 Não
Caracteres 
UNICODE
float 32 Sim Ponto flutuante
double 64 Sim Ponto flutuante
www.grancursosonline.com.br
29
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
A primeira coluna da tabela 3.1 representa o tipo primitivo. A segunda representa quantos 
bits são necessários para representar cada tipo. Fiz uma ordenação crescente até a metade 
da tabela, de modo que os quatro tipos numéricos (exceto o char) ficassem agrupados e 
depois reiniciei, colocando o restante dos tipos (boolean, char, float, double).
Note que os valores dos bits da primeira metade da tabela são idênticos aos da outra 
metade, ou seja, 16, 32, 64 e 16, 32, 64. Isso vai facilitar na memorização dos bits utilizados 
na representação dos tipos primitivos.
Temos uma exceção na segunda metade da tabela, que é a quantidade de bits para 
representar o tipo boolean: esse tipo representa, normalmente, um bit de informação. Friso 
que é normalmente porque seu tamanho não é precisamente definido.
A terceira coluna da tabela 3.1 informa se um tipo possui sinal para representar números 
negativos e positivos, e a quarta mostra o tipo de valor que cada tipo primitivo pode aceitar.
Tabela 3.2: Sobre os tipos primitivos na linguagem Java – Parte II.
Tipo Faixa de valores Valor padrão
byte -27 a 27 – 1 -128 a 127 0
short -215 a 215 – 1 -32.768 a 32.767 0
int -231 a 231 – 1 -2.147.483.648 a 2.147.483.647 0
long -263 a 263 – 1
-9.223.372.036.854.775.808 a 
9.223.372.036.854.775.807 0L
boolean true ou false – false
char '\u0000' a '\uffff' – 'u\0000'
float
+/-3.4E-38 a +/-
3.4E+38 – 0.0f
double
+/-1.7E-308 a +/-
1.7E+308 – 0.0
A segunda e a terceira colunas da tabela 3.2 representam a faixa de valores que um tipo 
pode abranger. Essa coluna é derivada da quantidade de bits da segunda coluna da tabela 3.1.
A última coluna da tabela 3.2 informa o valor padrão que uma variável pode receber de 
acordo com seu tipo.
São três pontos que precisamos ter mais atenção, em ordem decrescente de cobrança 
(tabela 3.3).
www.grancursosonline.com.br
30
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Tabela 3.3: Principais pontos sobre tipos primitivos para concursos.
Ponto Título Descrição
Primeiro 
ponto
Quais são os tipos 
primitivos
byte, short, int, long, boolean, char, float, doublé
As bancas perguntam muito sobre isso.
Temos de aprender quais são esses oito tipos
Segundo 
ponto
Quais as faixas de 
valores para os tipos 
numéricos integrais 
byte, short, int e long
Apenas como observação, o tipo char também 
é numérico integral, mas as faixas de valores 
mais cobradas são as dos tipos numéricos 
integrais citados.
Terceiro 
ponto
Quantos bits (ou 
bytes) são usados 
para representar cada 
tipo (segunda coluna)
Sendo que as quantidades de bits mais 
cobradas são as dos tipos numéricos integrais 
byte, short, int e long.
Vamos entender as tabelas 3.1 e 3.2 e os principais pontos dela com uma série 
de esquemas.
3.2.1. Intervalos dos tipos numéricos integrais (esquema do BSIL 1329)
Neste esquema, vou mostrar como aprender a memorizar quais as faixas de valores para 
os tipos numéricos integrais byte, short, int e long.
• Primeira parte da dica:
 – Imagine uma criança gripada tentando dizer “psiu”: ela provavelmente dirá BSIL =)
• Segunda parte da dica:
 – O número 1.329.
• Fechando nossa dica: BSIL 1.329!
www.grancursosonline.com.br
31
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 3.2: Esquema do BSIL 1.329.
Explicando melhor (figura 3.2):
• BSIL:
 – byte;
 – short;
 – int;
 – long.
• 1.329: Cada algarismo representa o primeiro algarismo dos números da faixa de valo-
res de cada tipo:
 – 1: -128 a 127;
 – 3: -32.768 a 32.767;
 – 2: -2 bilhões e alguma coisa a 2 bilhões e alguma coisa; e
 – 9: -9 trocentos e lá vai pedra a 9 trocentos e lá vai pedra.
A sequência BSIL 1.329 facilita a memorização das faixas de valores de cada tipo e, 
se ocorrer de nos depararmos com uma questão que aborte esse tópico, usaremos essa 
sequência, que é uma forma de resgatarmos a informação com tranquilidade. Responderemos 
nossa questão sem medo e rapidamente e passaremos para frente, pois teremos muitas 
outras questões para responder!
www.grancursosonline.com.br
32
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
3.2.2. Intervalos dos tipos numéricos integrais (esquema do 2x)
Bora avançar mais um pouco na memorização da tabela dos tipos primitivos?
Figura 3.3: Esquema de quantos de bits e bytes cada tipo representa.
Agora aprenderemos como memorizar:
• quais são os oito tipos primitivos; e
• quantos bits e bytes cada tipo representa.
Com esse esquema (figura 3.3), fechamos os três itens mais cobrados dos tipos primitivos.
O tipo byte possui um byte de tamanho, como o próprio nome indica. Um byte possui 
quantos bits? Oito bits.
Para o restante do grupo BSIL, basta seguir para a próxima letra multiplicando o número 
de bytes e de bits por 2:
• short: 2 bytes ou 16 bits;
• int: 4 bytes ou 32 bits; e
• long: 8 bytes ou 64 bits.
Agora veremos o grupo BCFD (boolean, char, float e double).
O tipo boolean representa um bit de informação, mas seu tamanho não é precisa-
mente definido.
www.grancursosonline.com.br
33
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Esse tipo é uma exceção dos valores do grupo BCFD, porém, do segundo tipo em diante 
desse grupo, a sequência é a mesma do grupo BSIL:
• char: 2 bytes ou 16 bits;
• float: 4 bytes ou 32 bits; e
• double: 8 bytes ou 64 bits.
3.2.3. Intervalos dos tipos numéricos integrais (números negativos e números 
positivos)
Quantos bits são necessários para representar um valor negativo e outro positivo para 
cada tipo do grupo BSIL?
Começaremos explicando sobre quantos bits são necessários para representar os números 
negativos. Primeiro, reservamos um bit para representar o bit de sinal. Esse bit é o bit mais à 
esquerda dos números binários. Para números negativos na base binária, o bit de sinal tem o valor 
1. O restante da quantidade de bits que cada tipo contém representa os bits do valor (figura 3.4).
Figura 3.4: Esquema de números negativos e números positivos de cada tipo.
Para os números positivos, faremos o mesmo: reservamos um bit para representar o bit 
de sinal. No caso dos números positivos na base binária, o bit de sinal possui o valor 0. O 
restante da quantidade de bits que cada tipo contém representa os bits do valor (figura 3.4).
www.grancursosonline.com.br
34
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Vamos explicar a quantidade de bits do tipo byte. O tipo byte possui oito bits de 
representação:
• um bit de sinal para informar que o valor é negativo;
• sete bits para representar o valor;
• um bit de sinal para informar que o valor é positivo; e
• sete bits para representar o valor;
Para o restante do grupo BSIL, temos:
• short, 16 bits de representação:
 – Sendo 1 para bit de sinal e 15 para representar o valor.
• int, 32 bits de representação:
 – Sendo 1 para bit de sinal e 31 para representar o valor.
• long, 64 bits de representação:
 – Sendo 1 para bit de sinal e 63 para representaro valor.
3.2.4. Intervalos dos tipos numéricos integrais (limites negativo e positivo)
Quais são os valores limites negativo e positivo que cada tipo pode comportar?
Figura 3.5: Esquema de valores limites negativo e positivo que cada tipo pode comportar.
www.grancursosonline.com.br
35
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Explicando o esquema da figura 3.5:
• Primeiro, temos a coluna do BSIL;
• A segunda informará quantos bits cada tipo comporta;
• A terceira coluna informa o valor do limite inferior do tipo;
 – É calculado pela fórmula -2(quantidade de bits que representa os valores).
• A quarta informa o valor do limite superior do tipo;
 – É calculado pela fórmula 2(quantidade de bits que representa os valores) -1.
O tipo byte, por exemplo, comporta oito bits de informação, então:
• O menor valor negativo é -27 (-128);
 – Sete, porque dos oito bits, o primeiro bit representa o sinal do número;
• O maior valor positivo é 27 - 1 (127);
 – Sete, porque dos oito bits, o primeiro bit representa o sinal do número.
ATENÇÃO
Para o cálculo do valor do limite positivo, usamos a fórmula 2(quantidade de bits que representa os valores) 
- 1. Essa subtração acontece porque o valor 0 (zero) faz parte dos valores positivos. Por 
isso, uma variável do tipo byte, por exemplo, pode receber de -128 a 127. São 128 valores 
negativos (-128 a -1) e 128 valores positivos (de 0 a 127).
Para o restante do grupo BSIL, faremos a mesma coisa.
3.2.5. Intervalos dos tipos numéricos integrais (intervalo total)
Com tudo o que vimos, falta apenas sabermos o intervalo total de cada tipo numérico 
integral. Esse esquema será fácil porque já entendemos os esquemas anteriores.
www.grancursosonline.com.br
36
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 3.6: Esquema do intervalo total de cada tipo.
Iniciando pelo tipo byte, temos (figura 3.6):
• No lado negativo, de -128 a -1;
 – Ou seja, temos 128 valores negativos.
• No lado positivo, de 0 a 127;
 – Ou seja, temos também 128 valores positivos.
Frisando, 0 está no lado dos positivos, por isso, no cálculo do valor do limite supe-
rior há um -1.
Ao todo, uma variável do tipo byte pode receber 256 (128 negativos e 128 positivos) valo-
res únicos diferentes no decorrer da execução de um programa.
Agora é explicar os outros tipos do grupo BSIL:
• Para o tipo short:
 – O valor limite negativo é -32.768;
 – O valor limite positivo é 32.767;
 – Temos então 65.536 valores diferentes para uma variável desse tipo.
• Para o tipo int:
 – O valor limite negativo é -2 bilhões e final 648;
 – O valor limite positivo é 2 bilhões e final 647;
 – Temos então 4 bilhões e alguma coisa de valores diferentes para uma variável 
desse tipo.
www.grancursosonline.com.br
37
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
• Para o tipo long:
 – O valor limite negativo é -9 lá vai pedra e final 808;
 – O valor limite positivo é 9 lá vai pedra e final 807;
 – Temos então um número grande para dedéu de valores diferentes para uma vari-
ável desse tipo.
3.2.6. Simplificando a tabela de tipos primitivos
• Quantos são os tipos primitivos?
 – Oito tipos primitivos.
• Quais são os tipos primitivos?
 – BSIL: byte, short, int e long; e
 – BCFD: boolean, char, float e double.
• Intervalos dos tipos numéricos integrais BSIL (exceto char): 1.329.
• O tipo boolean representa um bit de informação.
 – Mas seu tamanho não é precisamente definido.
• O tipo char também é um tipo numérico integral.
3.2.7. Inicialização das variáveis
Ao declarar com algum tipo primitivo, as variáveis de escopo de classe (variáveis de instân-
cia e variáveis estáticas) são inicializadas automaticamente com valores padrões desses tipos:
• 0 (zero); ou
• false.
As variáveis locais necessitam ser explicitamente inicializadas. Se as utilizarmos sem 
serem inicializadas, ocorrerá um erro de compilação.
DIRETO DO CONCURSO
8. (FGV/2022/TJ/TO/TÉCNICO JUDICIÁRIO/INFORMÁTICA) Na linguagem Java, o item 
que NÃO é parte dos tipos de dados (data types) primitivos é:
a. boolean.
b. decimal.
c. double.
d. long.
e. short.
www.grancursosonline.com.br
38
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
COMENTÁRIO
Quantos e quais são os tipos primitivos da linguagem Java: são oito tipos primitivos:
• BSIL: byte, short, int e long; e
• BCFD: boolean, char, float e double.
O único tipo citado na questão que não faz parte do BSIL BCFD é decimal. Portanto, a letra 
“b” é o nosso gabarito.
9. (FGV/2015/PGE/RO/ANALISTA DA PROCURADORIA/ANALISTA DE SISTEMAS – 
DESENVOLVIMENTO) São tipos primitivos na linguagem de programação Java:
a. int, float, double, char, boolean.
b. int, double, string, char, boolean.
c. integer, real, byte, char, boolean.
d. byte, word, short, integer, char.
e. int, real, char, string, boolean.
COMENTÁRIO
Quantos e quais são os tipos primitivos da linguagem Java: são oito tipos primitivos:
• BSIL: byte, short, int e long; e
• BCFD: boolean, char, float e double.
A letra “a” foi a única que trouxe um subconjunto correto dos tipos primitivos da linguagem 
Java: int, float, double, char, boolean.
string, integer, real e word não são tipos primitivos dessa linguagem. Esses tipos foram 
citados pelas outras alternativas da questão.
www.grancursosonline.com.br
39
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
4. OPERADORES
4.1. Operadores aritméticos
4.1.1. Visão geral
Temos os seguintes operadores aritméticos (figura 4.1):
• Adição +;
• Subtração -;
• Multiplicação *;
• Divisão /; e
• Módulo ou resto da divisão %.
Figura 4.1: Operadores aritméticos.
Tabela 4.1: Exemplos do uso dos operadores aritméticos.
Operador Nome Exemplo
+ Adição x + y
- Subtração x – y
* Multiplicação x * y
/ Divisão x / y
% Módulo ou resto da divisão x % y
www.grancursosonline.com.br
40
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
ATENÇÃO
Na linguagem Java, não há um operador de exponenciação. Para essa operação, utiliza-
mos o método pow() da classe Math (Math.pow(x, y).
Exemplo da operação de exponenciação em Java:
int x = 2;
int y = 3;
System.out.println(Math.pow(x, y)); // 8.0
Esses operadores são bem tranquilos de ser aplicados, porém, há alguns detalhes que 
precisamos estudar. É o que veremos nos próximos tópicos.
4.1.2. Tipos dos resultados das operações aritméticas
Antes de vermos detalhes de alguns operadores, é importante entendermos os tipos dos 
resultados das operações aritméticas (tabela 4.2).
De acordo com a tabela 4.2, temos:
• O tipo do resultado é int quando os dois operadores são dos tipos byte, short e int.
• O tipo do resultado é long quando:
 – pelo menos um operador for do tipo long; e
 – o outro for um tipo menos preciso.
• O tipo do resultado é float quando:
 – pelo menos um operador for do tipo float; e
 – o outro for um tipo menos preciso.
• O tipo do resultado é doublé quando:
 – pelo menos um operador for do tipo doublé; e
 – o outro for um tipo menos preciso.
www.grancursosonline.com.br
41
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Tabela 4.2: Resumo da descrição das fases de uma aplicação Java.
Tipo do operando 1 Tipo do operando 2 Tipo de resultado da operação
byte byte int
short short int
int int int
Pelo menos um deles é do tipo long e o outro é 
do mesmo tipo ou de um tipo menos preciso. long
Pelo menos um deles é do tipo float e o outro é 
do mesmo tipo ou de um tipo menos preciso. float
Pelo menos um deles é do tipo double e o outro é 
do mesmo tipo ou de um tipo menos preciso. double
Exemplo 1:
byte j = 15;
byte l = 20;
byte m = (byte) (j + l);
No Exemplo 1, os dois operandos j e l são do tipo byte e o resultado da operação de 
adição dos dois operandos é do tipo int. Com isso, houve a necessidade de sefazer casting 
para que a variável m do tipo byte pudesse receber o resultado da operação.
Exemplo 2:
int n = 15;
long o = 20;
int p = (int) (n - o);
No Exemplo 2, o operando o é do tipo long e o tipo do operando n é de um tipo menos 
preciso que o primeiro operando. Então o resultado da operação de adição dos dois ope-
randos é do tipo long. A variável p é do tipo int e, para que ela pudesse receber o resultado, 
houve a utilização de casting.
Exemplo 3:
float q = 15.5f;
double r = 20.7;
float s = (float) (q * r);
double é o tipo retorno pela multiplicação da variável q do tipo float pela variável r do tipo 
double. Isso acontece porque um dos operandos é double e outro é de um tipo menos preciso 
do que double, tipo float. Por isso temos de fazer casting para que a variável s do tipo float 
possa receber o resultado da operação.
www.grancursosonline.com.br
42
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Exemplo 4:
byte t = 19;
int u = 3;
double v = t / u;
No Exemplo 4, temos dois operandos: t do tipo byte e u do tipo int. A variável t recebeu o 
valor 19, e a variável u, o valor de 3. Temos também a declaração da variável v do tipo double 
recebendo o resultado da operação de divisão das variáveis t e u. Com isso, v receberá 6.0.
Como ambos os operandos são do grupo dos tipos numéricos integrais, então o resultado 
da divisão no exemplo é do tipo int 6, mas a variável v é do tipo double, então haverá a con-
versão automática de 6 para double (6.0).
Exemplo 5:
double w = 19.0;
int x = 3;
double y = w / x;
No exemplo 5, temos dois operandos w e x, sendo a variável w do tipo double e a variável x 
do tipo int. Com isso, o resultado da operação de divisão entre essas variáveis será do tipo double 
(6.333333333333333). Como a variável y é do tipo double, então ela vai receber esse valor.
4.1.3. Operador de adição +
O operador de adição + possui duas funções (figura 4.2):
• Função 1: adição entre tipos numéricos; e
• Função 2: concatenação de strings.
Como concatenador de strings, basta que um dos operandos seja do tipo String para que 
o resultado da operação seja uma string concatenada.
ATENÇÃO
Se forem usados vários operadores de adição e vários operandos, a partir do primeiro 
operando do tipo String, terão a função de concatenar strings o operador de adição antes 
desse operando e todos os operadores de adição após ele.
Exemplo:
String z = 15 + 8 + “Kal-El” + 15 + 8;
// z terá valor de “23Kal-El158”
// 15 + 8 antes do operando “Kal-El” foram somados (23)
// 15 + 8 depois do operando “Kal-El” foram concatenados (158)
www.grancursosonline.com.br
43
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Figura 4.2: Funções do operador de adição +.
4.1.4. Operador de divisão /
O operador de divisão / representa a divisão de:
• números inteiros; e
• números de ponto flutuante.
No caso de divisão de números inteiros, ou seja, quando os operandos são do tipo do 
grupo BSIL (byte, short, int e long):
• o tipo do resultado é int quando os dois operandos são dos tipos byte, short e int;
• o tipo do resultado é long quando:
 – pelo menos um dos operandos for do tipo long; e
 – o outro for de um tipo igual ou menos preciso.
Exemplo:
int x = 15 / 2; // x receberá o valor 7
ATENÇÃO
Em uma divisão de inteiros, quando o divisor for 0, leva-se a uma exceção ArithmeticException, 
pois não há divisão de inteiros por zero!
No caso de divisão de números de ponto flutuante:
• O tipo do resultado é float quando:
 – pelo menos um dos operandos for do tipo float; e
 – p outro for de um tipo igual ou menos preciso.
• O tipo do resultado é double quando:
 – pelo menos um dos operandos for do tipo double; e
 – o outro for de um tipo igual ou menos preciso.
www.grancursosonline.com.br
44
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Exemplo:
double y = 15 / 2.0; // y terá valor 7.5.
Quando da divisão de (sendo um deles dos tipos FD float/double):
• número positivo por 0, produz-se resultado infinito positivo;
• número negativo por 0, produz-se resultado infinito negativo; e
• 0 por 0, produz-se NaN (not a number).
4.1.5. Diferença entre os operadores de divisão / e módulo % entre dois números 
inteiros / O operador de divisão / representa o quociente da divisão entre dois núme-
ros inteiros, enquanto o operador módulo % representa o resto da divisão entre dois 
números inteiros (figura 4.3).
Figura 4.3: Operadores de divisão / e módulo % entre dois números inteiros.
DIRETO DO CONCURSO
10. (FGV/2015/TJBA/ANALISTA JUDICIÁRIO/TECNOLOGIA DA INFORMAÇÃO) Observe 
o seguinte trecho de código Java:
www.grancursosonline.com.br
45
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
O código, quando executado, irá imprimir:
a. 2.0
b. 1.5
c. 1.0
d. 0
e. um erro de operação
COMENTÁRIO
Organizando o código da questão, temos:
public class Main {
private static final int constReagente = 5;
public static float quantReagente(int quantMassa, int minutos) 
{
return quantMassa / (constReagente * minutos);
}
public static void main(String[] args) {
System.out.println(quantReagente(15, 2));
}
}
Resultado da execução do código:
1.0
Antes de comentarmos o código da questão, é importante citar que a classe Main é uma 
classe executável por ter um método especial: método main(). Sua assinatura é:
public static void main(String[] args) {... }
É um método público, estático, que não retorna nada e tem um parâmetro args, que é um 
array de strings.
99% das questões de concursos que contêm código Java apresentam uma classe 
executável.
Compilamos nossas classes Java (arquivos texto de extensão.java) com um compi-
lador Java:
javac *.java
O resultado da compilação das classes Java são arquivos de extensão .class que contêm 
bytecodes.
Voltando aos comentários do código da questão, a classe Main possui:
• Um atributo constReagente.
 – É um atributo privado, estático, final e do tipo int.
www.grancursosonline.com.br
46
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
 – Ele é inicializado com o valor 5.
 – Esse atributo tem escopo de classe.
• Dois métodos:
 – método main(); e
 – método quantReagente().
O método quantReagente():
• é um método público;
• retorna um valor float; e
• possui dois parâmetros formais do tipo int: quantMassa e minutos.
Esse método retorna o resultado da divisão da quantMassa dividido pelo resultado da mul-
tiplicação do atributo constReagente pelo parâmetro minutos.
Como a operação de multiplicação está entre parênteses, então ela tem de ser aplicada 
primeiro, e depois se executa a operação de divisão.
Dentro do método main(), há a impressão no console do usuário (System.out.println()) do 
resultado retornado pelo método quantReagente() passando os parâmetro reais 15 e 2.
Ao ser chamado com esses valores de parâmetros reais, o método quantReagente() vai 
retornar o valor 1.0:
• quantMassa recebe o valor 15;
• minutos recebe o valor 2;
• constReagente, como vimos, foi inicializado com o valor 5;
• A operação de multiplicação (constReagente * minutos) retorna o valor 10;
• A operação de divisão (quantMassa / 10) retorna o valor 1;
 – 15 / 10 = 1, pois é uma operação de divisão de inteiros.
• O método retorna o valor 1.0.
 – Como o método retorna um valor do tipo float, o resultado da operação de divisão de 
inteiros será convertido automaticamente para float (1.0).
Portanto, a letra “c” é o gabarito.
4.2. Operadores unários
4.2.1. Visão geral
São unários porque são aplicados em apenas um operando.
Temos os seguintes operadores aritméticos (figura 4.4):
• Mais +;
 – Indica valor positivo.
 – Não é necessário usá-lo em números positivos.
www.grancursosonline.com.br
47
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
• Menos -;
 – Nega uma expressão ou um número.
• Incremento ++;– Incrementa um valor em um.
• Decremento --;
 – Diminui um valor em um.
• Complemento lógico !;
 – Inverte o valor de um boolean.
Figura 4.4: Operadores unários.
Tabela 4.3: Exemplos do uso dos operadores unários.
Operador Nome Exemplo
+ Mais +x
- Menos -x
++ Incremento ++x ou y++
-- Decremento --x ou y--
! Complemento !x
www.grancursosonline.com.br
48
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Exemplo:
int x = 15;
System.out.println(“x:” + ++x); // O resultado gerado é x: 16.
Nós nos focaremos nos operadores de incremento e decremento, pois são os operadores 
mais cobrados deste tipo.
4.2.2. Operadores de incremento e decremento
O operador de incremento ++ incrementa um valor em um. Por exemplo, se temos uma 
variável x do tipo int, então x++ é como se fosse x = x + 1.
Já o operador de decremento --, por sua vez, diminui um valor em um. Se há uma vari-
ável y do tipo int, y-- equivale a y = y – 1.
Tanto o operador de incremento quanto o de decremento podem ser:
• pré-fixados: quando são aplicados antes de uma variável; ou
• pós-fixados: quando são aplicados depois de uma variável.
Quando esses operadores são pré-fixados, avalia-se o valor incrementado ou decre-
mentado de uma variável. O valor trabalhado já é o incrementado ou decrementado.
Exemplo:
int x = 15, y = 15;
System.out.println(“x:” + ++x); // O resultado gerado é x: 16.
System.out.println(“y:” + --y); // O resultado gerado é y: 14.
No código acima, o valor impresso da variável x é o valor já incrementado e o valor 
impresso da variável y é o valor decrementado.
Quando esses operadores são pós-fixados, avalia-se o valor original, ou seja, o valor traba-
lhado é o valor original de uma variável. Depois o valor da variável é incrementado ou decrementado.
Exemplo:
int x = 15;
System.out.println(“x:” + x++); // O resultado gerado é x: 15.
System.out.println(“x:” + x); // O resultado gerado é x: 16.
Na primeira impressão do valor da variável x, o valor dessa variável é o valor original (15), depois 
a variável é incrementada. Depois, na segunda impressão, o valor incrementado é impresso (16).
ATENÇÃO
É bem importante entender os operadores de incremento e decremento, pois são usados 
constantemente em questões de concursos que envolvem a linguagem Java. O enten-
dimento desses operadores pré-fixados e pós-fixados é de suma importância. Há várias 
questões que trabalham essas diferenças, quando se avalia o valor incrementado (decre-
mentado) de uma variável ou quando se avalia o valor original dessa variável.
www.grancursosonline.com.br
49
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
DIRETO DO CONCURSO
11. (FGV/2010/BADESC/ANALISTA DE SISTEMAS – DESENVOLVIMENTO DE SISTE-
MAS) Observe o código em Java a seguir, em que se pode verificar a aplicação dos 
operadores de pré-decremento e pós-decremento.
Após a execução do código, as variáveis m e n exibirão, respectivamente, os valores:
a. 42 e 41.
b. 42 e 42.
c. 42 e 43.
d. 43 e 42.
e. 43 e 43.
COMENTÁRIO
Organizando o código da questão, temos:
public class Decrementa {
 public static void main(String[] args) {
 // m não foi inicializada e n = 44;
 int m, n = 44;
 // m = 43 e n = 43.
 m = --n;
 // m = 43 e n = 42.
 m = n--;
 System.out.println(m);
 System.out.println(n);
 }
}
www.grancursosonline.com.br
50
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Resultado da execução do código:
43
42
A classe Decrementa é uma classe executável por ter o método main().
O método main() possui duas variáveis locais do int: m e n.
A variável n é inicializada com o valor 44 no momento de sua declaração. A variável m não 
é inicializada.
Na linha m = --n, a variável m recebe o valor já decrementado da variável n, pois foi usado 
o operador de decremento pré-fixado. Ou seja, a variável m recebe o valor 43 e a variável 
n é atualizada para 43.
Já na linha m = n--, a variável m recebe o valor atual da variável n (valor 43) e apenas de-
pois a variável n é atualizada para 42. Isso acontece porque agora foi usado o operador de 
decremento pós-fixado.
No final do método main(), temos:
• System.out.println(m): imprime o valor 43; e
• System.out.println(n): imprime o valor 42.
Com tudo isso, o gabarito da questão é a letra “d”.
4.3. Operadores de igualdade e relacionais
4.3.1. Visão geral
Figura 4.5: Operadores de igualdade e relacionais.
O tipo do resultado da operação é boolean.
www.grancursosonline.com.br
51
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Tabela 4.4: Exemplos do uso dos operadores de igualdade e relacionais.
Operador Nome Exemplo
== Igual a x == y
!= Diferente de x!= y
> Maior que x > y
< Menor que x < y
>= Maior que ou igual a x >= y
<= Menor que ou igual a x <= y
instanceof É instância de x instanceof y
Exemplo:
boolean x = 1 < 2; // x recebe true porque 1 é menor que 2
4.3.2. Operador instanceof
É um operador de comparação de tipo. Ele testa se um objeto é instância de:
• uma classe;
• uma subclasse; ou
• uma classe que implementa uma interface.
Sintaxe:
objeto instanceof Classe
Figura 4.6: Esquema para o entendimento do operador instanceof.
www.grancursosonline.com.br
52
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Explicando o esquema da figura 4.6, vamos supor que:
• Veículo seja uma superclasse;
• Carro seja uma subclasse da classe Veículo; e
• acelerar seja uma interface implementada pela classe Carro.
No esquema, temos ainda dois objetos:
• Objeto carro da classe Carro:
 – Carro carro = new Carro();
• Objeto veículo da classe Veículo:
 – Veículo veículo = new Veículo();
Supondo que o objeto veiculo é instância da classe Veículo:
• veiculo instanceof Veículo:
 – Retorna true porque o objeto é instância dessa classe.
• veiculo instanceof Carro:
 – Retorna false porque o objeto não é instância dessa classe.
• veículo instanceof Acelerar:
 – retorna false porque a classe do qual o objeto é instância não implementa essa 
interface.
Supondo que o objeto carro é instância da classe Carro:
• carro instanceof Carro:
 – Retorna true porque o objeto é instância dessa classe.
• carro instanceof Veículo:
 – Retorna true porque a classe do qual o objeto é instância estende dessa interface.
• carro instanceof Acelerar:
 – Retorna true porque a classe do qual o objeto é instância implementa essa interface.
ATENÇÃO
Estudaremos objetos, classes e interfaces em uma próxima aula.
Mais um exemplo com o operador instanceof:
public class Animal {
 public static void main(String[] args) {
 Cat cat = new Cat();
 System.out.println(cat instanceof Animal);
 System.out.println(cat instanceof Cat);
 }
}
class Cat extends Animal { }
www.grancursosonline.com.br
53
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Resultado da execução do código:
true
true
Temos duas classes no exemplo: Animal e Cat, sendo cat subclasse de Animal. No 
método main(), temos uma variável local cat, que é objeto da classe Cat():
• cat instanceof Animal retorna true porque cat é objeto de uma subclasse de Animal, ou 
seja, de Cat.
• cat instanceof Cat retorna true também porque cat é objeto da classe Cat.
DIRETO DO CONCURSO
12. (FGV/2017/IBGE/ANALISTA CENSITÁRIO/ANÁLISE DE SISTEMAS/DESENVOLVI-
MENTO DE APLICAÇÕES) O operador instanceof em Java:
I – aplica-se a operandos que sejam referências para objetos;
II – aplica-se a qualquer tipo de operando;
III – produz resultado do tipo boolean.
Está correto o que se afirma em:
a. somente I e II.
b. somente I e III.
c. somente II e III.
d. somente III.
e. I, II e III.
COMENTÁRIO
Comentando cada item, temos:
• Item I: o operador instanceof em Java aplica-se a operandos que sejam referências 
para objetos.
 – Certo. O operador instanceof é um operador de comparação de tipo. Ele testa se 
um objetoé instância de uma classe, uma subclasse ou uma classe que implementa 
uma interface.
• Item II: o operador instanceof em Java aplica-se a qualquer tipo de operando.
 – Errado. Não é para qualquer tipo de operando.
• Item III: o operador instanceof em Java produz resultado do tipo boolean.
 – Certo. O operador instanceof é um dos operadores de igualdade e relacionais e o 
tipo do resultado da operação é boolean.
Portanto, apenas o item II está errado, fazendo a letra “b” ser o gabarito da questão.
www.grancursosonline.com.br
54
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
4.4. Operadores de bits
4.4.1. Visão geral
Figura 1.7: Operadores de bits.
Tabela 4.5: Exemplos do uso dos operadores de bits.
Operador Nome Exemplo
~ Complemento ~x
& AND x & y
| OR x | y
^ XOR x ^ y
<< Deslocamento à esquerda x << y
>> Deslocamento à direita x >> y
>>> Deslocamento à direita sem sinal x >>> y
Todos esses operadores trabalham em nível de bits e com operandos numéricos. Para 
fazermos as operações de bits, primeiro, devemos transformar os operandos da base deci-
mal para a base binária e depois aplicar as operações bit a bit para os operandos.
www.grancursosonline.com.br
55
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
ATENÇÃO
Para melhor compreensão do uso desses operadores, sugiro que estude números binários 
e Notação de Complemento de Dois. Esses dois tópicos são importantes para entender os 
resultados das operações com operadores de bits.
4.4.2. Operador de complemento ~
O operador de complemento ~ inverte os bits de um número.
Exemplo:
byte x = ~20; // x recebe -21.
A variável do tipo byte x recebe o complemento do valor 20. Com isso, x recebe -21.
Tabela 4.6: Visualizando o resultado da operação com o operador de complemento.
Valor inicial 128 64 32 16 8 4 2 1 Valor final
20 0 0 0 1 0 1 0 0 20
~20 1 1 1 0 1 0 1 1 -21
De acordo com a tabela 4.6, temos:
• Na primeira linha, temos os bits valor 20.
• Na segunda linha, aplicamos o operador complemento no valor 20.
 – Com isso, todos os bits foram invertidos.
 – O valor encontrado depois dessa operação é -21.
Como chegamos ao valor -21? A linguagem Java utiliza a notação de complemento de 
dois. Então faremos o seguinte:
• O tipo byte possui oito bits de representação.
• A coluna 128 representa o bit de sinal;
 – É o bit mais à esquerda.
 – Como vemos aqui é igual a 1, com isso, sabemos que o número é negativo.
• Diminuímos 1 do valor;
• Invertemos os bits;
• Transformamos o número de base 2 para base 10;
• Como chegamos ao valor 21, então se conclui que 11101011 na base 2 é -21 na base 10.
www.grancursosonline.com.br
56
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
4.4.3. Operadores de AND &, OR | e XOR ^
Os operadores AND, OR e XOR operam sobre literais inteiros.
Lembrando que temos dois tipos de literais inteiros:
• int;
 – sendo esse o padrão; e
• long.
Como os operadores AND &, OR | e XOR ^ funcionam?
• Para o AND, o resultado é um bit 1, se TODOS forem 1;
• Para o OR, o resultado é um bit 1, se PELO MENOS um bit for 1; e
• Para o XOR, o resultado é um bit 1, se os bits forem DIFERENTES.
ATENÇÃO
Caso os operandos sejam booleanos, o resultado será idêntico ao obtido com operadores 
AND condicional e OR condicional, porém sem curto-circuito, ou seja, todos os operandos 
serão avaliados, mesmo sem necessidade.
Os operadores condicionais AND && e OR || possuem dois símbolos cada. Já os de bits 
AND & e OR | possuem apenas um cada.
Exemplos:
byte x = 93 & -21; // x recebe 73.
byte y = 93 | -21; // x recebe -1.
byte z = 93 ^ -21; // x recebe -74.
Tabela 4.7: Visualizando o resultado das operações com os operadores AND &, OR | e XOR ^.
Valor inicial 128 64 32 16 8 4 2 1 Valor final
93 0 1 0 1 1 1 0 1 93
-21 1 1 1 0 1 0 1 1 -21
& 0 1 0 0 1 0 0 1 73
| 1 1 1 1 1 1 1 1 -1
^ 1 0 1 1 0 1 1 0 -74
www.grancursosonline.com.br
57
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
De acordo com a tabela 4.7, transformamos os valores 93 e -21 para a base binária e 
depois aplicamos os operadores. Com o resultado na base binária, transformamos para a 
base decimal e encontramos o resultado de cada operação:
• 93 AND -21 é 73;
• 93 OR -21 é -1;
• 93 XOR -21 é 74.
DIRETO DO CONCURSO
13. (FGV/2021/IMBEL/SUPERVISOR/TECNOLOGIA DE INFORMAÇÃO) Com relação aos 
operadores bitwise do Java, considere os valores binários
a = 00111100
b = 00001101
Os valores resultantes das operações a&b e a|b são, respectivamente,
a. 00011100 e 11111101
b. 00001100 e 00111101
c. 00001111 e 00111111
d. 11001110 e 00001100
e. 01101100 e 00100101
COMENTÁRIO
A questão pede o resultado de a & b e a | b. Como as variáveis a e b já estão na base bi-
nária, basta aplicar os operadores bit a bit e saber o resultado de cada operação.
Variável e operação 128 64 32 16 8 4 2 1
a 0 0 1 1 1 1 0 0
b 0 0 0 0 1 1 0 1
& 0 0 0 0 1 1 0 0
| 0 0 1 1 1 1 0 1
^ 0 0 1 1 0 0 0 1
De acordo com a tabela acima, temos:
a & b = 000001100
a | b = 00111101
Com isso, a letra “b” é o nosso gabarito.
Coloquei também o resultado com XOR ^ apenas para treinarmos:
a ^ b = 00110001
www.grancursosonline.com.br
58
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
4.4.4. Operadores de descolamento
Temos os operadores de deslocamento:
• À esquerda <<;
• À direita >>; e
• À direita sem sinal >>>.
Eles também operam sobre literais inteiros.
Lembrando que temos dois tipos dos literais inteiros:
• int;
 – sendo esse o padrão; e
• long.
ATENÇÃO
Para operações com os operadores de deslocamento, os tipos de menor precisão (byte 
e short) são convertidos a int antes de realizar operação. É importante lembrar-se disso 
quando for resolver questões com esses operadores.
4.4.5. Operador de descolamento à esquerda <<
O operador de descolamento à esquerda <<:
• Desloca para esquerda os bits do primeiro operando pelo número de bits especificado 
pelo segundo operando;
• Preenche na direita com zero.
Exemplo:
byte x = 13 << 2; // x recebe 52.
// 13: 00000000000000000000000000001101
// 52: 00000000000000000000000000110100
byte y = -21 << 2; // y recebe -84.
// –21: 11111111111111111111111111101011
// –84: 11111111111111111111111110101100
No exemplo acima, a variável do tipo byte x recebe o resultado da operação do desloca-
mento à esquerda do valor 13 em duas casas:
• x então recebe 52;
• Temos o valor 13 na base 2 e no tipo int (em 32 bits);
 – Os tipos byte e short são convertidos em int primeiro;
 – 00000000000000000000000000001101;
www.grancursosonline.com.br
59
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
• Deslocam-se duas casas para a esquerda;
 – Havendo o preenchimento de zeros na direita (o que está destacado no sublinhado 
no valor 52 na base binária);
 – 00000000000000000000000000110100;
• O valor final encontrado foi 52 na base binária:
 – Como estamos trabalhando o tipo byte, então ficaremos apenas com os oito primei-
ros bits da direita para a esquerda;
 – O oitavo bit, da direita para esquerda, é o bit de sinal do tipo byte;
 – 110100.
Ainda no exemplo, a variável do tipo byte y recebe o resultado da operação do desloca-
mento à esquerda do valor -21 em 2 casas:
• y então recebe -84;
• Temos o valor -21 na base 2 e no tipo int (em 32 bits);
 – 11111111111111111111111111101011;
• Deslocam-se duas casas para a esquerda;
 – Havendo o preenchimento de zeros na direita (o que está destacado no sublinhado 
no valor -84 na base binária);
 – 11111111111111111111111110101100;
• O valor final encontrado foi -84 na base 2:
 – Como estamos trabalhando o tipo byte, então ficaremos apenas com os oito primei-
ros bits da direita para a esquerda;
 – O oitavo bit, da direita para esquerda, é o bit de sinal do tipo byte;
 – 10101100.
Tabela 4.8: Visualizando o resultado das operaçõescom o operador de deslocamento à 
esquerda <<.
Valor inicial 128 64 32 16 8 4 2 1 Valor final
13 0 0 0 0 1 1 0 1 13
13 << 2 0 0 1 1 0 1 0 0 52
-21 1 1 1 0 1 0 1 1 -21
-21 << 2 1 0 1 0 1 1 0 0 -84
www.grancursosonline.com.br
60
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
4.4.6. Operador de descolamento à direta >>
O operador de descolamento à direta >>:
• Desloca para direita os bits do primeiro operando pelo número de bits especificado 
pelo segundo operando; e
• Preenche na esquerda com zero ou um;
 – Dependendo do bit de sinal.
Exemplo:
byte x = 13 >> 2; // x recebe 3.
// 13: 00000000000000000000000000001101
// 03: 00000000000000000000000000000011
byte y = -21 >> 2; // y recebe -6.
// –21: 11111111111111111111111111101011
// –06: 11111111111111111111111111111010
No exemplo acima, a variável do tipo byte x recebe o resultado da operação do desloca-
mento à direita do valor 13 em duas casas:
• x então recebe 3;
• Temos o valor 13 na base 2 e no tipo int (em 32 bits);
 – Os tipos byte e short são convertidos em int primeiro;
 – 00000000000000000000000000001101;
 – O bit de sinal (o bit mais à esquerda) é 0.
• Deslocam-se duas casas para a direita;
 – Havendo o preenchimento de zeros na esquerda (o que está destacado no subli-
nhado no valor 3 na base binária);
 – 00000000000000000000000000000011;
 – Foi preenchido com 0 na esquerda porque o bit de sinal é 0.
• O valor final encontrado foi 3 na base 2:
 – Como estamos trabalhando o tipo byte, então ficaremos apenas com os oito primei-
ros bits da direita para a esquerda;
 – O oitavo bit, da direita para esquerda, é o bit de sinal do tipo byte;
 – 00000011.
www.grancursosonline.com.br
61
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
Tabela 4.9: Visualizando o resultado das operações com o operador de deslocamento 
à direita >>.
Valor inicial 128 64 32 16 8 4 2 1 Valor final
13 0 0 0 0 1 1 0 1 13
13 >> 2 0 0 0 0 0 0 1 1 3
-21 1 1 1 0 1 0 1 1 -21
-21 >> 2 1 1 1 1 1 0 1 0 -6
Ainda no exemplo, a variável do tipo byte y recebe o resultado da operação do desloca-
mento à direita do valor -21 em duas casas;
• y então recebe -6;
• Temos o valor -21 na base 2 e no tipo int (em 32 bits);
 – 11111111111111111111111111101011;
 – O bit de sinal (o bit mais à esquerda) é 1.
• Deslocam-se duas casas para a direita;
 – Havendo o preenchimento de uns na direita (o que está destacado no sublinhado no 
valor -6 na base binária);
 – 11111111111111111111111111111010;
 – Foi preenchido com 1 na esquerda porque o bit de sinal é 1.
• O valor final encontrado foi -6 na base 2:
 – Como estamos trabalhando o tipo byte, então ficaremos apenas com os oito primei-
ros bits da direita para a esquerda;
 – O oitavo bit, da direita para esquerda, é o bit de sinal do tipo byte;
 – 11111010.
4.4.7. Operador de descolamento à direta sem sinal >>>
O operador de descolamento à direta sem sinal >>>:
• Desloca para direita os bits do primeiro operando pelo número de bits especificado 
pelo segundo operando; e
• Preenche na esquerda com zero;
 – Independentemente do bit de sinal.
www.grancursosonline.com.br
62
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
ATENÇÃO
O operador de deslocamento à direita tem dois sinais “maior que”: >>. Já o operador de 
deslocamento à direita sem sinal possui três sinais maior que: >>>.
Exemplo:
byte x = 13 >>> 2; // x recebe 3.
// 13: 00000000000000000000000000001101
// 03: 00000000000000000000000000000011
byte y = (byte) -21 >>> 2; // y recebe -6.
// –21: 11111111111111111111111111101011
// 1073741818 (byte, -6): 00111111111111111111111111111010
No exemplo acima, a variável do tipo byte x recebe o resultado da operação do desloca-
mento à direita sem sinal do valor 13 em duas casas:
• x então recebe 3;
• Temos o valor 13 na base 2 e no tipo int (em 32 bits);
 – Os tipos byte e short são convertidos em int primeiro;
 – 00000000000000000000000000001101.
• Deslocam-se duas casas para a direita;
 – Havendo o preenchimento de zeros na esquerda, independentemente do bit de sinal 
(o que está destacado no sublinhado no valor 3 na base binária);
 – 00000000000000000000000000000011.
• O valor final encontrado foi 3 na base 2:
 – Como estamos trabalhando o tipo byte, então ficaremos apenas com os oito primei-
ros bits da direita para a esquerda;
 – O oitavo bit, da direita para esquerda, é o bit de sinal do tipo byte.
Ainda no exemplo, a variável do tipo byte y recebe o resultado da operação do desloca-
mento à direita sem sinal do valor -21 em duas casas;
• y então recebe -6;
• Temos o valor -21 na base 2 e no tipo int (em 32 bits);
 – 11111111111111111111111111101011.
• Deslocam-se duas casas para a direita;
 – Havendo o preenchimento de zeros na esquerda, independentemente do bit de sinal 
(o que está destacado no sublinhado no valor 1073741818 na base binária);
www.grancursosonline.com.br
63
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
 – 00111111111111111111111111111010;
 – Se houve o preenchimento com zeros na esquerda, então o bit de sinal agora é zero, 
indicando que o resultado positivo;
 – O número gerado então foi um grande número: 1 bilhão e alguma coisa.
• O valor final encontrado foi -6 na base 2:
 – Como estamos trabalhando o tipo byte, então ficaremos apenas com os oito primei-
ros bits da direita para a esquerda;
 – O oitavo bit, da direita para esquerda, é o bit de sinal do tipo byte;
 – 11111010.
Nessa última operação, tivemos de fazer o casting, pois o valor encontrado em int é um 
número positivo maior que uma variável do tipo byte por comportar:
byte y = (byte) -21 >>> 2;
Tabela 4.10: Visualizando o resultado das operações com o operador de deslocamento 
à direita sem sinal >>>.
Valor inicial 128 64 32 16 8 4 2 1 Valor final
13 0 0 0 0 1 1 0 1 13
13 >>> 2 0 0 0 0 0 0 1 1 3
-21 1 1 1 0 1 0 1 1 -21
-21 >>> 2 1 1 1 1 1 0 1 0 -6
Para finalizarmos, explicarei uma situação que acontece com as operações de desloca-
mento à direita sem sinal.
Veja o seguinte exemplo de operação de deslocamento à direita sem sinal de 32 casas, 
sendo seu resultado armazenado em uma variável do tipo int:
int x = -1 >>> 32;
// Primeiro operando -1:
// 1111111111111111111111111111111
// Resultado da operação -1:
// 1111111111111111111111111111111
No exemplo acima, a variável do tipo int x recebe o resultado da operação do desloca-
mento à direita sem sinal do valor -1 em 32 casas:
• x vai receber o valor -1;
• Temos o valor -1 na base 2 e no tipo int (em 32 bits);
 – 1111111111111111111111111111111;
www.grancursosonline.com.br
64
Professor Rogério Araújo
LINGUAGEM JAVA – O BÁSICO DA LINGUAGEM
www.grancursosonline.com.br
• Deslocam-se 32 casas para a direita;
 – Porém, como o número de casas para se deslocar para direita (segundo operando) é 
a quantidade total de posições do tipo int (32 posições), então haverá como se fosse 
um deslocamento circular e o resultado será novamente o valor -1:
 – 1111111111111111111111111111111.
O interessante é que deveria haver um preenchimento na esquerda com 0, o que poderia 
como resultado o valor 0 na base decimal para a variável x. Mas não é isso que acontece.
Outros exemplos:
int a = -2 >>> 32; // -2
int b = -5 >>> 32; // -5
int c = -45 >>> 32; // -45
Conclusão: qualquer operação com o deslocamento à direita sem sinal o onde o primeiro 
operando é um número negativo e o segundo operando é quantidade de bits que representa 
o tipo int (32) tem como resultado o próprio número negativo.
Essa situação também ocorre quando temos uma variável do tipo long e são deslocadas 
64 casas à direita sem sinal de um número negativo:
long x = -1 >>> 64;
// Primeiro operando -1:
//1111111111111111111111111111111111111111111111111111111111111111
// Resultado da operação -1:
//1111111111111111111111111111111111111111111111111111111111111111
Outros exemplos:

Continue navegando