Valores válidos para variáveis em Java

Valores válidos para variáveis em Java

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

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

}
Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Ó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 da formação Java.

Alex Felipe
Alex Felipe

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Criador de mais de 40 cursos, como Kotlin, Flutter, Android, persistência de dados, comunicação com Web API, personalização de telas, testes automatizados, arquitetura de Apps e Firebase. É expert em Programação Orientada a Objetos, visando sempre compartilhar as boas práticas e tendências do mercado de desenvolvimento de software. Atuou 2 anos como editor de conteúdo no blog da Alura e hoje ainda escreve artigos técnicos.

Veja outros artigos sobre Programação