Cómo sumar dos números en Java
Suma dos números en Java con int, long, double y BigDecimal, incluyendo entrada del usuario.
Sumar dos números es la primera operación aritmética que la mayoría escribe en Java, pero la forma "correcta" depende de dónde provienen los números y qué tan grandes pueden ser. Este capítulo cubre los enfoques idiomáticos: aritmética literal con int, parseo de valores desde texto, suma de punto flotante y suma segura sin desbordamiento silencioso.
Sumar dos valores int
El caso más simple es sumar dos variables int con el operador +, uno de los operadores aritméticos de Java. El resultado es también un int.
int a = 7;
int b = 5;
int sum = a + b;
System.out.println(sum); // 12Este es el caso cotidiano y el que más escribirás. Lo único a tener en cuenta es el rango de int: almacena valores de -2.147.483.648 a 2.147.483.647. Si se supera ese límite, el valor da la vuelta silenciosamente en lugar de lanzar una excepción — lo cual se trata más adelante.
Sumar números parseados desde texto
Cuando los números llegan como cadenas — desde entrada por consola, un archivo o una petición HTTP — debes convertirlos antes de sumarlos. Usa Integer.parseInt para números enteros o Double.parseDouble para decimales.
String first = "42";
String second = "58";
int sum = Integer.parseInt(first) + Integer.parseInt(second);
System.out.println(sum); // 100Un error común de principiantes es usar + directamente sobre las cadenas: "42" + "58" produce "4258" porque + concatena cadenas en lugar de sumarlas. Parsea primero y luego suma. Si el texto no es un número válido, parseInt lanza NumberFormatException, así que valida o envuelve la llamada en un try/catch cuando la entrada no es de confianza.
Sumar decimales y manejar el desbordamiento
Para valores decimales, suma operandos double (o float). Ten en cuenta que el punto flotante binario no puede representar todos los decimales exactamente, por lo que 0.1 + 0.2 es 0.30000000000000004, no 0.3. Para dinero, usa BigDecimal en su lugar.
Para números enteros que pueden superar el rango de int, amplía un operando a long o usa Math.addExact para convertir el desbordamiento en una excepción en lugar de obtener un resultado incorrecto. Elegir el tipo numérico correcto desde el principio es la mejor defensa — consulta tipos de datos de Java para el rango de cada tipo.
| Enfoque | Comportamiento al desbordarse | Usar cuando |
|---|---|---|
int + int | Da la vuelta silenciosamente | Los valores están cómodamente dentro del rango de int |
(long) a + b | Calcula en 64 bits, sin vuelta | La suma puede superar int pero cabe en long |
Math.addExact(a, b) | Lanza ArithmeticException | Debes detectar el desbordamiento, no absorberlo |
BigInteger / BigDecimal | Precisión arbitraria | Los valores pueden ser arbitrariamente grandes o necesitan decimales exactos |
int big = Integer.MAX_VALUE;
System.out.println(big + 1); // -2147483648 (wrapped!)
System.out.println((long) big + 1); // 2147483648 (correct)
System.out.println(Math.addExact(big, 1)); // throws ArithmeticExceptionSumar dos números ingresados por el usuario
En un programa real, los operandos suelen provenir del teclado. Un Scanner lee cada línea y la convierte en un número en un solo paso con nextInt (o nextDouble para decimales), por lo que no tienes que llamar a parseInt tú mismo.
import java.util.Scanner;
public class AddInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter first number: ");
int a = scanner.nextInt();
System.out.print("Enter second number: ");
int b = scanner.nextInt();
System.out.println("Sum: " + (a + b));
}
}Si el usuario escribe algo que no es un entero, nextInt lanza InputMismatchException. Protégete contra ello con hasNextInt() o un try/catch cuando la entrada no es de confianza.
Un ejemplo completo
Lo que se puede observar en la ejecución:
int sum: 12muestra el operador+sumando directamente dos valoresint— el caso cotidiano.parsed sum: 100confirma queInteger.parseIntconvierte"42"y"58"en números antes de sumarlos, en lugar de concatenarlos en"4258".double sum: 0.30000000000000004es el error de representación de punto flotante de0.1 + 0.2— prueba de quedoubleno es exacto para decimales, así que usaBigDecimalcuando la precisión importa.int overflow: -2147483648muestraInteger.MAX_VALUE + 1dando la vuelta silenciosamente alintmás negativo, mientras quelong safe: 2147483648da la respuesta correcta al ampliar un operando along.addExact: overflow detectedconfirma queMath.addExactlanzaArithmeticExceptionante el mismo desbordamiento en lugar de devolver un valor incorrecto.