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 promocional da Alura, com um design futurista em tons de azul, apresentando dois blocos de texto, no qual o bloco esquerdo tem os dizeres:

Ó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. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Veja outros artigos sobre Programação