Não entendo porque ocorre isso. Alguém sabe?
Eu tenho duas linhas de código:
int numero = 0047;
System.out.println(numero);
//O resultado deveria ser: "47" porque uma variável do tipo int remove os zeros da esquerda, correto?
//Quando eu coloco para imprimir o valor com a variável 0047 ou 047 o valor impresso é: 39 e não 47
O Java trata números inteiro iniciados com 0 como sendo números de base octal.
int num1 = 011;//numero em octal
int num2 = 11;//numero em decimal
System.out.println(num1);//vai imprimir 9
System.out.println(num2);//vai imprimir 11
você pode passa 3 tipos de literal um int
com base 10 (Decimal)
com base 8 (Octal) //obs: este começa com zero
com base 16(Hexadecimal) //16 simbolos 0 1 2 3 4 5 6 7 8 9 a b c d e f
os de base 10 são ou números normais
0 1 2 3 4 5 6 7 8 9 10 11 15 16 17 18 19 29 21 ..
os Octal são que iniciar com 0 seguido de um numero.
01 02 03 04 05 06 07 010 011 012 013 014 015 016 017 020 021.. // obs: precisa do zero na frente e quando chega no 7 o próximo aumenta um numero na frente como ser fosse binário.
e os hexadecimal que começa com 0x seguindo de um ou vários caractere de (zero)0 a f.
listagem de um a 15 :
0 1 2 3 4 5 6 7 8 9 a b c d e f
int _decimal = 10;
int _octal = 012 ;
int _hexadecimal = 0xa;
System.out.println(_decimal+" - "+_octal+" - "+_hexadecimal);
http://www.devmedia.com.br/entendendo-as-literais-em-java/26526