CUIDADO: Métodos parseXxx() e valueOf()

5 respostas
T

Tava estudando para a certificação e observei o seguinte detalhe…

Cuidado com esses métodos nas classes empacotadoras do java.lang!

São métodos que SÓ aceitam STRINGS como parâmetros!

Observem o seguinte trecho:

long l = Long.parseLong(23L);

long l = Long.parseLong(2.0); // ATENÇÃO AQUI! ***

long l = Long.parseLong(2.3L);

long l = Long.parseLong(0x23); // Em haxadecimal

long l = Long.parseLong(0X23); // Em haxadecimal

-> Todas as formas acima produzem ERRO de Runtime: NumberFormatException!

Só são aceitas apenas as seguintes formas:

long l = Long.parseLong(34);

long l = Long.parseLong(23);

long l = Long.parseLong(034); // Em octal

Essas…compilam e rodam sem problemas!

***Outra observação, a forma:

float f = Float.parseFloat(“2.0”);

É perfeitamente legal! Só não rola o 2.0 no caso de números inteiros!

Outra importante observação…

O parseXxx() retorna SEMPRE um valor primitivo e o valueOf retorna um OBJETO empacotador (Integer, Float, Long, Byte, Short, Double).

[]'s Tjmm.

5 Respostas

Java_Vinicius_Machin

Valeu pela dica Tjmm eu ainda não cheguei nesta parte nos meus estudos…mas mesmo assim reconheço o valor das dicas que vc citou… :!:
(alguma idéia para estudos em conjunto ou coisa do tipow manda uma mensagem privada pra mim ae…falow)

Fabricio_Cozer_Marti

Tjmm,

eu posso estar enganado,
mas quando você passa uma string como parâmetro
usando parseXxxx… , você pode passar também um segundo parametro
indicando a base…
Acho q ele não identifica valores na base octal por exemplo como vocÊ
mencionou…

senão ele também converteria o valor para hexadecimal … mas nesse caso
existe um x e naum um 0 (zero)…por isso que naum lanca NumberFormatException …

não tenho absoluta certeza porque não testei ainda …
eu lembro que já precisei instanciar um Long, que continha um octal recebendo o mesmo como uma string … e tive que passar a base , como o segundo argumento…mas isso já tem tempo, nem sei se foi na 1.2 ainda…

é só isso!

Fabricio_Cozer_Marti

Foi como eu disse ,

não rola pra octal mesmo naum…

é necessário informar a base do numero…

saiu 8, que é o valor 10 na base decimal para a base octal…

e foi na 1.4 …

keller

Java Vinicius Machine:
Valeu pela dica Tjmm eu ainda não cheguei nesta parte nos meus estudos…mas mesmo assim reconheço o valor das dicas que vc citou… :!:
(alguma idéia para estudos em conjunto ou coisa do tipow manda uma mensagem privada pra mim ae…falow)

Até onde eu sei dia 01/02 estaremos começando um grupo de estudos pra certificação, basta esperar… o danieldestro ficou responsavel em organizar as aulas e as passa-las, as aulas serão ministradas através do lohis www.lohis.com.br valeu? até mais… :smiley:

T

fmartins:
Tjmm,

eu posso estar enganado,
mas quando você passa uma string como parâmetro
usando parseXxxx… , você pode passar também um segundo parametro
indicando a base…
Acho q ele não identifica valores na base octal por exemplo como vocÊ
mencionou…

senão ele também converteria o valor para hexadecimal … mas nesse caso
existe um x e naum um 0 (zero)…por isso que naum lanca NumberFormatException …

não tenho absoluta certeza porque não testei ainda …
eu lembro que já precisei instanciar um Long, que continha um octal recebendo o mesmo como uma string … e tive que passar a base , como o segundo argumento…mas isso já tem tempo, nem sei se foi na 1.2 ainda…

é só isso!

Exato fmartins!

Não citei o outro parâmetro, porque o post iria ficar muito grande e observei nos exercícios que fiz até agora, que o que eles mais pedem é apenas a versão do método com um único parâmetro!

Sobre a linha:

long l = Long.parseLong(“034”);

Não irá haver conversão de octal para decimal não! Só quis dizer que é uma construção válida! Nesse caso, l (ele) receberá 34 em decimal mesmo!

[]'s Tjmm.

Criado 22 de janeiro de 2005
Ultima resposta 24 de jan. de 2005
Respostas 5
Participantes 4