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
}
Ó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.