Introdução: por que essa questão atormenta até desenvolvedores Java experientes?
Se você já pesquisou no Google "How do I convert a String to an int in Java?", então você não está sozinho. Esta é uma das perguntas mais populares no Stack Overflow, com milhões de visualizações. Parece simples, não? Pegue a string, converta para número — e pronto. Mas na prática, a conversão de String para int em Java esconde armadilhas: desde exceções inesperadas até a escolha entre desempenho e legibilidade do código.
Neste artigo, vamos analisar todas as formas populares de converter string em número em Java, comparando-as em velocidade, segurança e conveniência. Você aprenderá como evitar o clássico erro NumberFormatException e obterá soluções prontas para projetos reais. Vamos lá!
Método nº1: O clássico — Integer.parseInt()
A maneira mais comum e rápida de converter String para int em Java é usar o método estático Integer.parseInt(). Ele recebe uma string e retorna o tipo primitivo int.
public class ParseIntExample { public static void main(String[] args) { String number = "42"; int result = Integer.parseInt(number); System.out.println(result); // Saída: 42 }}Vantagens do Integer.parseInt():
- Máximo desempenho — não cria objetos desnecessários.
- Simplicidade — uma linha de código sem wrappers extras.
- Suporte a sistemas numéricos — você pode especificar a base (radix):
Integer.parseInt("ff", 16)retorna 255.
Desvantagens e armadilhas:
- Se a string contiver caracteres não numéricos (espaços, letras), lança NumberFormatException.
- Não trata
null— resultará emNullPointerException.
// Exemplo de erro:String badInput = "42abc";int value = Integer.parseInt(badInput); // NumberFormatException!Método nº2: O seguro Integer.valueOf()
A segunda forma popular de converter string em número em Java é Integer.valueOf(). Externamente, é semelhante ao parseInt(), mas retorna um objeto Integer, não um primitivo.
public class ValueOfExample { public static void main(String[] args) { String number = "123"; Integer result = Integer.valueOf(number); System.out.println(result); // Saída: 123 }}Quando usar valueOf()?
- Se você precisar de um objeto
Integerpara coleções (ex.:List<Integer>). - Se você estiver trabalhando com
Optionalou Stream API (veja abaixo). - Graças ao cache (para números de -128 a 127),
valueOf()pode ser até mais rápido queparseInt()+ autoboxing.
Observação importante:
Se você precisa do primitivo int, é melhor usar parseInt() — ele é cerca de 10-15% mais rápido, pois não cria um objeto wrapper. Mas em 99% das aplicações, essa diferença é imperceptível.
Método nº3: Java 8+ e Optional — tratamento elegante de erros
A abordagem moderna para converter String para int em Java é usar Optional. Isso permite evitar blocos try-catch e tornar o código mais limpo.
import java.util.Optional;
public class OptionalParseExample { public static Optional<Integer> safeParseInt(String str) { try { return Optional.of(Integer.parseInt(str)); } catch (NumberFormatException e) { return Optional.empty(); } }
public static void main(String[] args) { // Parsing bem-sucedido safeParseInt("100").ifPresent(System.out::println); // 100