Ola Pessoal!Estamos de volta com um assunto que, para nossa surpresa, tem uma certa frequencia no nosso forum:O uso de numeros octais em Java.Na verdade o assunto nao surge como subject das threads, mas sim, como equivocos causados durante o uso da API do projeto.E por isso, devido a relativa relevancia deste "problema", resolvemos criar este post :-)Vamos la, o que voces acham: seria um problema de design da API? Ou simplesmente um error-prone da linguagem Java no que diz respeito a manipulacao dos numeros?Vamos ao problema,... mas antes consideremos a relevancia do problema para nos; bom, nesses 5 anos de projeto JRimum, ja chegamos a ter 6 threads relacionadas ao assunto:https://groups.google.com/d/msg/jrimum-community/JFja8FxEIeg/1AOkRFAgxX0Jhttps://groups.google.com/d/msg/jrimum-community/QDBJTCpAuck/XgO4Siex0fgJhttps://groups.google.com/d/msg/jrimum-community/I-FnpcNh_Mc/WzIwhaajMnMJhttps://groups.google.com/d/msg/jrimum-community/FMhxjSNtvfM/ESYwUEpMj5EJhttps://groups.google.com/d/msg/jrimum-community/qofevOfovt8/5DcG9kkA6q0Jhttps://groups.google.com/d/msg/jrimum-community/xZWT5VqDa7Q/BB8zUPM-m1cJIsso nos daria uma media de 1 thread por ano (considerando que uma delas nao foi um erro e sim uma sugestao).Para nos isso tem relevancia, pois nos forca a explicar, na maioria das vezes, o porque um usuario da API esta enfrentando aquela situacao, aparentemente sem logica para ele. Dessa forma, preferimos criar um post para fazer referencia ao problema quando ele ocorrer novamente ano que vem, correto? Isso e, vamos fazer uso do reuso :-)O Problema:Normalmente o problema/situacao surge na utilizacao de objetos como:Agencia Carteira NumeroDaConta;Onde esses objetos sao instanciados com valores do tipo java.lang.Integer, como:new Agencia(01234,"7");O problema esta no primeiro zero, mas por que? La vai, simples e direto: porque em Java um numero do tipo Inteiro com zero na frente e considerado como um Octal. Veja em:http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.htmlSe voce nao sabia e ainda esta desconfiado, veja o que acontece se executar esse simples exemplo:Integer inteiro = 0717;System.out.println(inteiro);Pois e, a saida sera 463 que e o valor de um numero do tipo Inteiro correspondente ao Octal "0717" e nao o numero do tipo Inteiro 717. Mas voce que e novato no Java, ou por algum motivo desconhece o uso do Octal, ainda pode pensar: "mas isso e coisa do tal do Autoboxing nao?". Ok, entao vamos ver agora um outro exemplo:Integer numero = Integer.valueOf(010);Sera que a saida vai ser 10 (Dez)? Ainda acredita nisso? Serio? E, se voce executou esse codigo, nao foi isso que voce viu. O que voce acabou de ver foi que a variavel numero corresponde na verdade a 8 (Oito), pois voce atribuiu um 8 (Oito) escrito em Octal (porque comeca com zero) a uma variavel do tipo Inteiro. E quando voce visualiza a saida, dai voce ve exatamente o numero 8 do tipo Inteiro e nao o dez que voce escreveu.Portanto: Integer.valueOf(010) == 8Para saber mais sobre os tipos numericos do Java veja em:http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.htmlCalma, nao se preocupe caso voce tenha cometido erros com Octais. Este nao e um equivoco raro entre programadores iniciantes em Java, mas esperamos que este erro nao se repita em seus programas nunca mais :-)E aqueles que acham que e um problema da API? Bom, podemos ver erros semelhantes em outras API de mesmo proposito tambem:http://www.guj.com.br/java/262410-stella---boleto---codigo-do-cedente-03036A Solucao?Caso voce ainda nao tenha percebido e ache que isso realmente e um problema, entao sua solucao e:Remova o(s) zero(s) antes do numero do tipo Inteiro.Pronto, essa era a moral da historia. Caso queira