Números que mudam no Java

Olá Pessoal!
Estou com uma pequena dúvida, estudando para a certificação em Java 7, me deparei com seguinte exercício:

private void ass(){
int a[] = {1, 2, 053, 4};
int b[][] = {{1,2,4},{2,2,1},{0,43,2}};

System.out.println(a[3]==b[0][2]); 
System.out.println(" " + (a[2]==b[2][1]));

}

Naturalmente, assinalei a opção em que a saída era (true, false), porém errei a questão. Então fui verificar o que havia acontecido e notei que quando se coloca o “0” (ZERO) na frente do número, ele decrementa a dezena, não sabia disso e não consigo entender o porquê disso.
Gostaria que alguém pudesse me dar uma ajuda para compreender melhor.

É por conta do tipo de dados (int) que trabalha com inteiros ignorando os zeros a esquerda, acredito que a forma mais correta de trabalhar com valores que possuam zero na frente seria com String, posso estar errado, mas nunca me deparei com uso de valores numéricos com zero na frente se n fosse para CPF’s, e nesses casos eu sempre usei String.

quando um numero começa com 0 ele é considero um numero OCTAL ( base 8 )

não tem nada haver com decrementar dezena.

tanto que 08 e 09 vão dar erro de compilação pq base 8 vai de 0 a 7.

1 curtida

Exatamente o que o peczenyj falou.

O número está em OCTAL 053 que é o mesmo que 43 em DECIMAL. Por isso é true true.

(5 * 8¹) + (3 * 8º) = 43

Lembrando que qualquer número elevado a 0 é igual a 1.

http://www.robotroom.com/NumberSystems4.html

Abs

1 curtida

Obrigado @Zabimaru agora ficou muito claro.

Obrigado @peczenyj exatamente isso!

É um pouco diferente disso, mas agradeço a disponibilidade.