- 1 1. Conhecimento Básico para Conversão entre Números e Strings em Java
- 2 2. Como Converter Números em Strings
- 3 3. Como Converter Strings em Números
- 4 4. Conversões Usando BigDecimal e BigInteger (Finanças / Cálculos de Precisão)
- 5 5. Erros Comuns Durante a Conversão e Como Tratá‑los
- 6 6. Métodos de Conversão Recomendados por Caso de Uso
- 7 7. Erros Comuns e Anti‑Padrões
- 8 8. Resumo
- 9 9. Perguntas Frequentes (FAQ)
- 9.1 Q1. Qual é a melhor maneira única de converter um número em string no Java?
- 9.2 Q2. O que devo usar: parseInt ou valueOf?
- 9.3 Q3. Existe uma forma de verificar se uma string é numérica antes de converter?
- 9.4 Q4. Por que ocorre NumberFormatException durante a conversão numérica?
- 9.5 Q5. Por que não devo usar double para cálculos monetários?
- 9.6 Q6. O que devo ter cuidado ao converter valores de formulário em números?
- 9.7 Q7. E se eu quiser controlar o formato de exibição após converter para string?
1. Conhecimento Básico para Conversão entre Números e Strings em Java
Ao desenvolver em Java, você inevitavelmente encontrará situações como “dados que parecem um número, mas são tratados como string” ou “valores recebidos como strings que você quer calcular como números”. Por exemplo, entradas de formulário, importações de CSV, respostas de API e saída de logs costumam chegar como strings mesmo que pareçam numéricos.
Nesta seção, organizaremos por que a conversão é necessária e os pontos que iniciantes costumam ter dificuldade.
1.1 Por que a Conversão se Torna Necessária
Programas Java tratam o tipo de dado (type) de forma explícita. Contudo, as entradas e saídas de dados do mundo real tendem a se tornar “strings”, como por exemplo:
- Entrada do usuário : Mesmo que você digite “123” em uma caixa de texto, o que o programa recebe é basicamente uma string
- Arquivos (CSV / JSON / arquivos de configuração) : Quando você os lê, costuma obter valores como strings
- HTTP/API : Muitos valores são passados como strings (ou o tipo JSON pode ser ambíguo)
- Exibição e logs : Em vez de imprimir números como estão, é comum convertê‑los para strings e formatá‑los
Por causa disso, duas direções de conversão ocorrem frequentemente no trabalho real:
- Number → String : exibição na UI, logs, mensagens, concatenação, etc.
- String → Number : cálculos, comparações, verificações de intervalo, agregação, etc.
O que importa aqui é: mesmo que pareça numérico, tipos diferentes significam coisas diferentes.
"10"(string) e10(número) podem parecer iguais, mas são tipos diferentes no código- String
"10" + "2"torna‑se"102"(concatenação) - Número
10 + 2torna‑se12(adição)
Erros como “eu pensei que estava somando, mas acabou em concatenação de string” acontecem facilmente se você não mantiver essa distinção em mente.
1.2 Java É Rigoroso com os Tipos
Java é uma linguagem estaticamente tipada, então operações com tipos incompatíveis geralmente resultam em erro de compilação. Isso aumenta a segurança, mas ao mover entre tipos diferentes como strings e números, você precisa de conversões adequadas.
Por exemplo, se você tentar usar uma entrada de string diretamente como número, receberá um erro.
- Você quer calcular usando a string
"123"como umint→ É preciso convertê‑la paraintantes de usá‑la
Além disso, Java possui dois tipos de tipos numéricos: tipos primitivos e classes wrapper, que podem ser uma fonte comum de confusão.
- Tipos primitivos:
int,long,double, etc. (leve, números básicos) - Classes wrapper:
Integer,Long,Double, etc. (números tratados como objetos)
Por exemplo, Integer.valueOf("123") devolve um Integer (objeto), enquanto Integer.parseInt("123") devolve um int (primitivo).
Abordaremos essa diferença com mais detalhes na próxima seção, mas iniciantes costumam ficar presos porque “a mesma conversão parece retornar tipos diferentes”.
1.3 Diferenças entre Conversão Automática e Explícita
Quando você ouve “conversão”, pode imaginar que Java a faz automaticamente. Na verdade, há comportamentos que parecem conversão automática em alguns casos.
Um exemplo comum é a concatenação de strings.
- Se você escrever
"Total: " + 10, o 10 parece ser convertido automaticamente em string
Entretanto, embora seja conveniente, isso também pode gerar resultados indesejados.
"10" + 2→"102"(concatenação de string, não adição numérica)
Portanto, Java tem casos em que valores são implicitamente transformados em string, mas String → Number basicamente não é convertido automaticamente.
Em outras palavras:
- Number → String : pode acontecer implicitamente em alguns contextos (como concatenação)
- String → Number : sempre requer conversão explícita (como
parseInt)
Lembrar disso manterá você seguro.
Além disso, ao converter strings para números, as entradas nem sempre são válidas.
- String vazia
"" - Espaços
" 123 " - Separador de milhar
"1,000" - Tentar converter um decimal
"12.34"paraint - Caracteres não numéricos
"12a"
Em tais casos, uma exceção em tempo de execução (tipicamente NumberFormatException) ocorrerá.
Em sistemas do mundo real, é crucial projetar assumindo que “entrada inválida pode chegar”.
2. Como Converter Números em Strings
Nesta seção, explicaremos as formas mais comuns de converter números em strings em Java, juntamente com como escolher entre elas.
Essa conversão é usada constantemente em logs, saída de UI e construção de mensagens.
2.1 Usando String.valueOf() (Mais Comum)
Para converter números em strings, a abordagem mais segura e recomendada é String.valueOf().
int i = 100;
String s = String.valueOf(i);
Ela suporta não apenas int, mas também long, double, float, boolean e quase todos os tipos primitivos.
double d = 12.34;
String s = String.valueOf(d);
Principais características dessa abordagem:
- Sintaxe consistente que é fácil de lembrar
- Funciona com tipos primitivos e classes wrapper
- Alta legibilidade
- Intenção clara (“esta é uma conversão para string” à primeira vista)
Ela também transforma objetos wrapper em strings de forma segura.
Integer num = null;
String s = String.valueOf(num); // "null"
Mesmo se você passar null, não lançará uma NullPointerException, o que é especialmente útil para logging.
2.2 Usando Integer.toString() / Double.toString()
Cada classe wrapper numérica fornece um método utilitário toString().
int i = 100;
String s = Integer.toString(i);
double d = 12.34;
String s = Double.toString(d);
Isso funciona corretamente, mas tem essas características:
- O método difere por tipo (Integer / Double / Long, etc.)
- É um pouco tedioso lembrar de todos eles
- Menos versátil que
String.valueOf()
Então, em projetos reais, String.valueOf() é frequentemente preferido, a menos que você queira enfatizar explicitamente um tipo específico.
2.3 Cuidado ao Chamar toString() em Objetos
Você também pode chamar toString() diretamente em objetos wrapper ou em seus próprios objetos.
Integer i = 100;
String s = i.toString();
Isso funciona, mas você deve ter cuidado se null for possível.
Integer i = null;
String s = i.toString(); // NullPointerException
Se o objeto for null, isso causará um erro em tempo de execução.
Para segurança, String.valueOf() é mais adequado em casos como:
- Saída de log
- Geração de strings de depuração
- Caminhos de código onde null pode aparecer
2.4 Deve-se Usar “+ “”” para Conversão?
Você pode ter visto código como este:
int i = 100;
String s = i + "";
Sim, ele converte um número em uma string. No entanto, essa não é uma abordagem recomendada.
Razões:
- A intenção não é óbvia à primeira vista
- É ambíguo se é concatenação ou conversão
- Frequentemente criticado em revisões de código
- Mais propenso a causar mal-entendidos durante mudanças futuras
Pode aparecer em demos curtas ou testes rápidos, mas é melhor evitá-lo para código mantível.
2.5 Resumo: Como Escolher a Conversão Número → String
Para evitar confusão no trabalho real, lembre-se disto:
- Escolha padrão: String.valueOf()
- Se quiser enfatizar o tipo: Integer.toString() / Double.toString()
- Chamar toString() em objetos requer consciência de null
- Evite + “” em princípio
3. Como Converter Strings em Números
A partir daqui, explicaremos o tópico especialmente importante em projetos reais: converter strings em números.
Como entrada do usuário e dados externos não são garantidos como válidos, entender métodos de conversão e armadilhas é essencial.
3.1 Usando Integer.parseInt() (Mais Básico)
Um método representativo para converter uma string em um int é Integer.parseInt().
String s = "123";
int i = Integer.parseInt(s);
Esse método retorna o tipo primitivo int, o que é conveniente quando você quer realizar cálculos ou comparações imediatamente.
int total = Integer.parseInt("10") + Integer.parseInt("20");
// total is 30
No entanto, passar strings como as seguintes causará uma exceção em tempo de execução.
"abc"""(string vazia)"12.3"(decimal)"1.000"(com vírgulas)int i = Integer.parseInt("abc"); // NumberFormatException
Essa exceção não é detectada em tempo de compilação—ela ocorre em tempo de execução, portanto você deve ter cuidado.
3.2 Usando Integer.valueOf()
Integer.valueOf() é outra forma representativa de converter uma string em um número.
String s = "123";
Integer i = Integer.valueOf(s);
A maior diferença em relação ao parseInt() é que o tipo de retorno é Integer (uma classe wrapper).
parseInt()→intvalueOf()→Integer
Essa diferença importa em cenários como:
- Armazenar valores em coleções (List / Map)
- Projetos que lidam com
null - Quando você quer tratar o valor como um objeto
Internamente, valueOf() também lança NumberFormatException se a conversão falhar.
Portanto, não é “menos propenso a erros” que o parseInt().
3.3 Como Escolher Entre parseInt e valueOf
Se você não tem certeza de qual usar, esses critérios ajudam:
- Se o objetivo é cálculo ou comparação →
parseInt() - Se você quer tratá‑lo como um objeto →
valueOf()
Como o Java moderno possui autoboxing, a diferença prática é menor, mas ainda é importante desenvolver o hábito de escolher com base no tipo de retorno.
3.4 Convertendo para Outros Tipos Numéricos Como double / long
Frequentemente você precisa converter strings para tipos diferentes de inteiros.
long l = Long.parseLong("100000");
double d = Double.parseDouble("12.34");
As regras básicas são as mesmas:
Long.parseLong()→longDouble.parseDouble()→doubleFloat.parseFloat()→float
Todos lançam NumberFormatException se a string não puder ser convertida.
Um ponto crítico é tentar converter uma string decimal para um tipo inteiro:
int i = Integer.parseInt("12.34"); // exception
Nesse caso, você precisa de um design que trate o valor como double desde o início.
3.5 Atenção a Espaços no Início/Fim
A entrada do usuário costuma conter espaços inadvertidos.
String s = " 123 ";
int i = Integer.parseInt(s); // exception
Nesses casos, é comum usar trim() antes da conversão.
int i = Integer.parseInt(s.trim());
Entretanto, mesmo após trim(), uma exceção ocorrerá se permanecerem caracteres não numéricos.
3.6 Resumo: Pontos‑Chave para Conversão de String → Número
Para converter strings em números com segurança, mantenha em mente os seguintes pontos:
- Sempre desconfie de entrada externa
- Projete assumindo que exceções podem ocorrer
- Decida claramente o tipo numérico (int / long / double)
- Pré‑processamento quando necessário (trim, etc.)
4. Conversões Usando BigDecimal e BigInteger (Finanças / Cálculos de Precisão)
Os tipos int e double introduzidos até aqui são convenientes, mas é preciso cautela quando a precisão dos cálculos é crítica.
Especialmente para dinheiro, quantidades e taxas, BigDecimal e BigInteger são usados para evitar erros de arredondamento e perda de precisão.
4.1 Por Que double Não É Suficiente
Como double é um tipo de ponto flutuante, ele é armazenado internamente como uma aproximação em binário.
Como resultado, você pode observar comportamentos como este:
double d = 0.1 + 0.2;
System.out.println(d); // 0.30000000000000004
Isso não é um bug—é o comportamento esperado.
Pode parecer pequeno, mas pode ser fatal em casos como:
- Cálculos monetários
- Processamento de faturamento e liquidação
- Cálculos cumulativos de juros ou razões
Nesses casos, você precisa de um tipo que não introduza erro de ponto flutuante.
4.2 Conversão de String → Número Usando BigDecimal
Com BigDecimal, a regra é: crie‑o a partir de uma string.
BigDecimal bd = new BigDecimal("12.34");
Um padrão que você deve evitar é:
BigDecimal bd = new BigDecimal(12.34); // not recommended
Porque o double original já contém um erro de aproximação; convertê‑lo para BigDecimal propagará esse erro.
Lembre‑se: sempre crie BigDecimal a partir de uma String.
4.3 Conversão de Number → String (BigDecimal)
Para converter BigDecimal em uma string, costuma‑se usar toString().
BigDecimal bd = new BigDecimal("12.3400");
String s = bd.toString(); // "12.3400"
Se precisar de formatação para exibição, pode usar DecimalFormat, mas a melhor prática é separar o processamento interno da formatação de exibição.
4.4 Quando Usar BigInteger
BigInteger é usado para lidar com inteiros muito grandes.
BigInteger bi = new BigInteger("12345678901234567890");
Casos de uso típicos:
- Números com contagem de dígitos extremamente alta
- Representação numérica de IDs ou valores de hash
- Cálculos inteiros que excedem o intervalo de
long
É menos comum em aplicações de negócios típicas, mas é eficaz quando você precisa manipular inteiros com limites desconhecidos ou ilimitados.
4.5 Resumo: Como Pensar em BigDecimal / BigInteger
- Dinheiro / cálculos críticos de precisão → BigDecimal
- Inteiros enormes → BigInteger
BigDecimaldeve ser criado a partir de String- Mantenha a formatação separada dos cálculos
5. Erros Comuns Durante a Conversão e Como Tratá‑los
Ao converter strings em números, deve‑se assumir que erros podem acontecer a qualquer momento.
Nesta seção, organizamos as exceções mais comuns e abordagens seguras de tratamento.
5.1 O Que é NumberFormatException?
NumberFormatException é uma exceção em tempo de execução lançada quando uma string não pode ser interpretada como número.
int i = Integer.parseInt("abc"); // NumberFormatException
Essa exceção não é detectada em tempo de compilação – aparece apenas quando o código é executado.
Portanto, se a entrada vem de fora (formulários, arquivos, APIs, etc.), você deve sempre considerá‑la.
Causas comuns incluem:
- Contém caracteres não numéricos
- String vazia ou nula
- Tentativa de converter um decimal para um tipo inteiro
- Contém vírgulas ou símbolos (ex.: “1,000”)

5.2 Tratamento Básico com try‑catch
A abordagem mais simples é usar try‑catch para capturar a exceção.
try {
int i = Integer.parseInt(input);
} catch (NumberFormatException e) {
// Handling when conversion fails
}
Pontos chave:
- Lida de forma confiável com o caminho de erro
- Torna o comportamento de falha explícito
- É a prática mais comum em projetos reais
Combinado com logging e mensagens de erro, isso permite um processamento seguro.
5.3 Estratégia de Pré‑verificação para Evitar Exceções
Além do tratamento de exceção, você pode validar previamente se a string é numérica.
boolean isNumber = input.matches("\\d+");
Com uma expressão regular, é possível verificar se a string contém apenas dígitos. Contudo, há ressalvas importantes:
- Difícil suportar decimais e números negativos
- Pode ficar complexo
- Não oferece garantia completa
Portanto, na prática, costuma‑se tratar try‑catch como a rede de segurança final.
5.4 Cuidado com null e Strings Vazias
Antes da conversão numérica, é importante checar se a string é nula ou vazia.
if (input == null || input.isEmpty()) {
// Error handling
}
Ignorar essa verificação pode gerar exceções ou comportamentos inesperados.
Strings vazias são especialmente comuns em entradas de formulário e arquivos de configuração.
5.5 Resumo: Como Pensar no Tratamento de Erros
- Considere a entrada externa como potencialmente inválida
- Use try‑catch para capturar exceções de forma confiável
- Use pré‑verificações como validação complementar
- Exclua null e strings vazias logo no início
6. Métodos de Conversão Recomendados por Caso de Uso
Até aqui, cobrimos as principais formas de converter entre números e strings em Java.
Nesta seção, organizamos a mentalidade baseada em casos de uso para que você não hesite no desenvolvimento real.
6.1 Exibição na UI e Saída de Log
Para exibição na UI e logs, segurança e legibilidade são prioritárias.
Recomendado:
- Number → String:
String.valueOf() - Mesmo quando pode haver um objeto envolvido, use
String.valueOf()log.info("count=" + String.valueOf(count));
Mesmo que null possa aparecer, ele impede exceções.
6.2 Cálculos e Comparações
Para cálculos e comparações, a regra básica é converter para tipos numéricos o quanto antes.
- String → Número:
parseInt()/parseLong()/parseDouble() - Após a conversão, concluir o processamento usando tipos numéricos
int price = Integer.parseInt(inputPrice); int total = price * quantity;
Continuar a processar como strings pode causar bugs sutis.
6.3 Entradas de Formulário e Processamento de Dados Externos
Trate a entrada do usuário e os dados externos sob a suposição de que valores inválidos chegarão.
- verificações de null / string vazia
- tratamento de exceções via try‑catch
- retornar mensagens de erro conforme necessário
try { int age = Integer.parseInt(input); } catch (NumberFormatException e) { // Input error handling }
Evite escrever “apenas o caminho feliz” — pense primeiro nos caminhos de erro.
6.4 Dinheiro e Processamento Crítico de Precisão
Para dinheiro, taxas e outros casos em que erro de ponto flutuante não é aceitável, use BigDecimal.
- String →
BigDecimal:new BigDecimal(String) - Separe a formatação para exibição dos cálculos
BigDecimal amount = new BigDecimal(inputAmount);
A chave é não passar por double.
6.5 Armazenamento em Coleções ou Manipulação como Objetos
Ao armazenar valores em uma List ou Map, ou quando seu design lida com null, as classes wrapper são adequadas.
Integer.valueOf()Long.valueOf()List<Integer> list = new ArrayList<>(); list.add(Integer.valueOf("10"));
6.6 Resumo por Caso de Uso
Resumido por caso de uso:
- Exibição / logs →
String.valueOf() - Cálculos →
parseXxx() - Dinheiro / precisão →
BigDecimal - Entrada externa → projetar para exceções
- Coleções →
valueOf()
7. Erros Comuns e Anti‑Padrões
Converter entre números e strings é básico, mas tanto iniciantes quanto desenvolvedores experientes podem cometer erros.
Esta seção resume os anti‑padrões que você deve evitar em projetos reais.
7.1 Tentando Calcular Mantendo Strings
Esse código parece plausível, mas é arriscado:
String a = "10";
String b = "20";
String result = a + b; // "1020"
Isso não é cálculo — é concatenação de strings.
Para cálculos numéricos, converta para tipos numéricos primeiro:
int result = Integer.parseInt(a) + Integer.parseInt(b); // 30
7.2 Uso Excessivo de “+ “”” para Conversão
String s = value + "";
Funciona, mas a intenção não fica clara e a manutenibilidade é baixa, portanto não é recomendado.
- Provavelmente será apontado em revisões de código
- Confunde quem lê mais tarde
- Ambíguo se é conversão ou concatenação
Usar String.valueOf() explicitamente é mais seguro.
7.3 Passar double Diretamente para BigDecimal
BigDecimal bd = new BigDecimal(0.1); // not recommended
Isso é perigoso porque usa um double que já contém erro de aproximação.
A abordagem correta:
BigDecimal bd = new BigDecimal("0.1");
Para dinheiro e casos críticos de precisão, sempre crie a partir de uma string.
7.4 Escrever Código Pressupondo que Exceções Não Ocorrerão
int i = Integer.parseInt(input);
Em projetos reais, a suposição de que a entrada é sempre válida raramente se sustenta.
Ao lidar com entrada externa, inclua sempre tratamento de exceções:
try {
int i = Integer.parseInt(input);
} catch (NumberFormatException e) {
// Error handling
}
7.5 Usar Valores Sem Estar Ciente das Diferenças de Tipo
Também é comum usar tipos sem considerar diferenças como int vs Integer, ou double vs BigDecimal.
- Seu objetivo é cálculo?
- Seu objetivo é exibição?
- A precisão é crítica?
Escolher tipos com base no propósito é a maneira mais rápida de prevenir bugs.
8. Resumo
Em Java, converter entre números e strings é algo cotidiano, mas também um processo onde pequenos erros podem gerar grandes problemas.
Principais lições deste artigo:
- Para Number → String,
String.valueOf()é o padrão - Para String → Number, escolha entre
parseXxx()evalueOf()com base no tipo de retorno - Trate entradas externas assumindo que exceções podem ocorrer
- Use
BigDecimalpara dinheiro e cálculos críticos de precisão - Evite padrões ambíguos como
+ ""
Em vez de memorizar métodos, é mais importante escolher com base no caso de uso e no tipo.
Com essa mentalidade, você ficará preso muito menos vezes ao processamento fundamental do Java.
9. Perguntas Frequentes (FAQ)
Aqui resumimos os pontos problemáticos mais comuns para leitores que pesquisam “java number string conversion” em formato de perguntas e respostas.
Esta seção tem o objetivo de preencher lacunas que podem permanecer após a leitura do texto principal.
Q1. Qual é a melhor maneira única de converter um número em string no Java?
Em geral, o método mais recomendado é String.valueOf().
Razões:
- Consistente e fácil de entender
- Funciona tanto com tipos primitivos quanto com classes wrapper
- Não lança exceção ao receber
nullString s = String.valueOf(100);
Em projetos reais, usar este como padrão ajuda a evitar erros.
Q2. O que devo usar: parseInt ou valueOf?
Escolha com base no tipo de retorno.
Integer.parseInt()→int(primitivo)Integer.valueOf()→Integer(classe wrapper)
Se seu objetivo são cálculos, use parseInt().
Se quiser armazená‑lo em coleções ou tratá‑lo como objeto, valueOf() é mais adequado.
Q3. Existe uma forma de verificar se uma string é numérica antes de converter?
Uma abordagem simples é usar uma expressão regular.
boolean isNumber = input.matches("\\d+");
Entretanto, esse método tem limitações:
- Decimais e números negativos são difíceis de suportar
- Não garante segurança completa
Portanto, na prática, o melhor é assumir que try‑catch ainda é necessário como medida de segurança final.
Q4. Por que ocorre NumberFormatException durante a conversão numérica?
NumberFormatException acontece quando uma string não pode ser interpretada como número.
Causas comuns:
- Contém caracteres não numéricos
- String vazia ou
null - Tentativa de converter um decimal para um tipo inteiro
- Contém vírgulas ou símbolos
Ao lidar com entradas externas, sempre projete assumindo que exceções podem ocorrer.
Q5. Por que não devo usar double para cálculos monetários?
Porque double é armazenado como uma aproximação em binário, erros de ponto flutuante podem ocorrer.
double d = 0.1 + 0.2; // 0.30000000000000004
Para dinheiro, taxas e outros casos críticos de precisão, a escolha correta é usar BigDecimal criado a partir de uma string.
BigDecimal bd = new BigDecimal("0.1");
Q6. O que devo ter cuidado ao converter valores de formulário em números?
Sempre mantenha esses pontos em mente:
- Verifique
null/ strings vazias - Capture exceções com try‑catch
- Defina comportamento claro para casos de erro
Trate a entrada do usuário como “potencialmente inválida” por padrão para evitar bugs.
Q7. E se eu quiser controlar o formato de exibição após converter para string?
Mantenha a conversão numérica e a formatação de exibição separadas.
- Conversão:
String.valueOf()ouBigDecimal - Formatação: use
DecimalFormat, etc.
Separar o processamento interno da apresentação melhora a manutenibilidade.

