Valores válidos para variáveis em Java

(Last Updated On: 16 de março de 2016)

Durante o meu treinamento para certificação da Oracle surgiu o seguinte problema:

Quais são os valores válidos para uma variável do tipo int?
Imagine que temos a classe telefone:

public class Telefone {

private final int ddd;
private final long numero;

public Telefone(int ddd, long numero) {
this.ddd = ddd;
this.numero = numero;
}

//métodos

}

Ótimo, agora vou cadastrar um telefone de São Paulo (SP):

public static void main (String[] args){     
     Telefone telSP = new Telefone(011, 33229000);
}

vou adicionar mais 2 telefones, um de Salvador(BA) e outro de Refice(PE):

Telefone telSP = new Telefone(011, 33229000);
Telefone telBA = new Telefone(071, 55339000);
Telefone telPE = new Telefone(081, 22669000);

Ué, o telefone de Recife não compila? Como assim? Deixa eu imprimir o telSP e o telBA:

Telefone telSP = new Telefone(011, 33229000);
Telefone telBA = new Telefone(071, 55339000);
System.out.println(telSP);
System.out.println(telBA);

Resultado:

> (9) 33229000
  (57) 55339000

9? 57?
Como assim?! Que estranho.
A variável do tipo int, além de receber inteiros, aceita números octais, hexadecimais e até mesmo binários!

Nesse caso, quando utilizamos o 0 na frente do número, indicamos que estamos lidando com números na base 8, ou seja: estrutura de números entre 1, 2, 3, 4, 5, 6 e 7, por isso os valores foram 9 e 57.
Isso também explica o motivo de não compilar o código de Recife(081), já que em octal, não existe o número 8 ou 9.
Então se tentarmos compilar um telefone de Campinas(SP):

//9 não faz parte dos números octais
int ddd = 019;

Não compila também! Para resolver esse caso, bastaria retirar o 0 em cada um dos ddds:

Telefone telSP = new Telefone(11, 33229000);
Telefone telBA = new Telefone(71, 55339000);
Telefone telPE = new Telefone(81, 22669000);
System.out.println(telSP);
System.out.println(telBA);
System.out.println(telPE);

Verificando o resultado:

> (11) 33229000
  (71) 55339000
  (81) 22669000

Agora o meu sistema cadastra os telefones conforme o esperado!

Vimos que nem sempre os valores que esperamos dar certo funcionam e por isso é importante compreender todas as restrições que as nossas variáveis possuem. Ficou curioso a respeito de outros valores interessantes que a variável int e as demais podem receber? Dê uma olhada nos nossos cursos de Java.

FIQUE POR DENTRO

Content Editor at Alura and Software Developer

Próximo ArtigoFuncionalidade: sugestão de edição de conteúdo no Alura