W3docs

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); // 12

Este 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); // 100

Un 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.

EnfoqueComportamiento al desbordarseUsar cuando
int + intDa la vuelta silenciosamenteLos valores están cómodamente dentro del rango de int
(long) a + bCalcula en 64 bits, sin vueltaLa suma puede superar int pero cabe en long
Math.addExact(a, b)Lanza ArithmeticExceptionDebes detectar el desbordamiento, no absorberlo
BigInteger / BigDecimalPrecisión arbitrariaLos 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 ArithmeticException

Sumar 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

java— editable, runs on the server

Lo que se puede observar en la ejecución:

  • int sum: 12 muestra el operador + sumando directamente dos valores int — el caso cotidiano.
  • parsed sum: 100 confirma que Integer.parseInt convierte "42" y "58" en números antes de sumarlos, en lugar de concatenarlos en "4258".
  • double sum: 0.30000000000000004 es el error de representación de punto flotante de 0.1 + 0.2 — prueba de que double no es exacto para decimales, así que usa BigDecimal cuando la precisión importa.
  • int overflow: -2147483648 muestra Integer.MAX_VALUE + 1 dando la vuelta silenciosamente al int más negativo, mientras que long safe: 2147483648 da la respuesta correcta al ampliar un operando a long.
  • addExact: overflow detected confirma que Math.addExact lanza ArithmeticException ante el mismo desbordamiento en lugar de devolver un valor incorrecto.

Práctica

Práctica
¿Por qué Integer.parseInt('42') + Integer.parseInt('58') da 100 mientras que '42' + '58' da '4258'?
¿Por qué Integer.parseInt('42') + Integer.parseInt('58') da 100 mientras que '42' + '58' da '4258'?
Was this page helpful?