Introducción: ¿por qué esta pregunta atormenta incluso a desarrolladores Java experimentados?
Si alguna vez has buscado en Google "How do I convert a String to an int in Java?", no estás solo. Es una de las preguntas más populares en Stack Overflow con millones de visitas. Parecería sencillo: tomas la cadena, la conviertes a número y listo. Pero en la práctica, la conversión de String a int en Java esconde trampas: desde excepciones inesperadas hasta la elección entre rendimiento y legibilidad del código.
En este artículo, analizaremos todas las formas populares de convertir una cadena a número en Java, comparándolas en velocidad, seguridad y facilidad de uso. Aprenderá a evitar el clásico error NumberFormatException y obtendrá soluciones listas para proyectos reales. ¡Allá vamos!
Método n.º 1: El clásico — Integer.parseInt()
La forma más común y rápida de convertir String a int en Java es usar el método estático Integer.parseInt(). Toma una cadena y devuelve el tipo primitivo int.
public class ParseIntExample { public static void main(String[] args) { String number = "42"; int result = Integer.parseInt(number); System.out.println(result); // Salida: 42 }}Ventajas de Integer.parseInt():
- Máximo rendimiento — no crea objetos innecesarios.
- Simplicidad — una línea de código sin envoltorios adicionales.
- Soporte de sistemas numéricos — se puede especificar la base (radix):
Integer.parseInt("ff", 16)devuelve 255.
Desventajas y trampas:
- Si la cadena contiene caracteres no numéricos (espacios, letras), se lanza una NumberFormatException.
- No maneja
null— se produce unNullPointerException.
// Ejemplo de error:String badInput = "42abc";int value = Integer.parseInt(badInput); // ¡NumberFormatException!Método n.º 2: El seguro Integer.valueOf()
La segunda forma popular de convertir una cadena a número en Java es Integer.valueOf(). Externamente es similar a parseInt(), pero devuelve un objeto Integer, no un primitivo.
public class ValueOfExample { public static void main(String[] args) { String number = "123"; Integer result = Integer.valueOf(number); System.out.println(result); // Salida: 123 }}¿Cuándo usar valueOf()?
- Si necesita un objeto
Integerpara colecciones (por ejemplo,List<Integer>). - Si trabaja con
Optionalo Stream API (ver más abajo). - Gracias al almacenamiento en caché (para números de -128 a 127),
valueOf()puede ser incluso más rápido queparseInt()+ autoboxing.
Un detalle importante:
Si necesita el primitivo int, es mejor usar parseInt() — es aproximadamente un 10-15% más rápido, ya que no crea un objeto envoltorio. Pero en el 99% de las aplicaciones, esta diferencia es imperceptible.
Método n.º 3: Java 8+ y Optional — manejo elegante de errores
El enfoque moderno para la conversión de String a int en Java es usar Optional. Permite evitar bloques try-catch y hacer el código más limpio.
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) { // Parseo exitoso safeParseInt("100").ifPresent(System.out::println); // 100