W3docs

Cómo sumar dos números en Java

Sume dos números en Java con int, long, double y BigDecimal, incluida la entrada introducida por el usuario.

Cómo sumar dos números en Java

Sumar dos números es la primera aritmética que la mayoría escribe en Java, pero la manera «correcta» depende de dónde vienen los números y cuán grandes pueden llegar a ser. Este capítulo cubre los enfoques idiomáticos: aritmética con literales int, análisis de valores desde texto, suma en 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 +. El resultado es a su vez 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á. Lo único que debe vigilar es el rango de int: contiene valores de -2 147 483 648 a 2 147 483 647. Sume más allá de ese límite y el valor da la vuelta silenciosamente en lugar de lanzar una excepción — se cubre abajo.

Sumar números analizados desde texto

Cuando los números llegan como cadenas — desde la entrada de consola, un archivo o una solicitud HTTP —, debe convertirlos antes de sumar. Use 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 principiante es usar + directamente sobre las cadenas: "42" + "58" produce "4258" porque + concatena cadenas en lugar de sumarlas. Analice primero, luego sume. Si el texto no es un número válido, parseInt lanza NumberFormatException, así que valide o envuelva la llamada en un try/catch cuando la entrada no sea de confianza.

Sumar decimales y manejar el desbordamiento

Para valores decimales, sume operandos double (o float). Tenga en cuenta que el punto flotante binario no puede representar cada decimal con exactitud, así que 0.1 + 0.2 es 0.30000000000000004, no 0.3. Para dinero, use BigDecimal en su lugar.

Para números enteros que puedan exceder el rango de int, amplíe un operando a long, o use Math.addExact para convertir el desbordamiento en una excepción en lugar de en una respuesta equivocada.

EnfoqueComportamiento en desbordamientoUse cuando
int + intDa la vuelta silenciosamenteValores cómodamente dentro del rango de int
(long) a + bCalcula en 64 bits, sin vueltaLa suma puede exceder int pero cabe en long
Math.addExact(a, b)Lanza ArithmeticExceptionDebe detectar el desbordamiento, no absorberlo
BigInteger / BigDecimalPrecisión arbitrariaLos valores pueden ser arbitrariamente grandes o necesitar 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

Un ejemplo resuelto

java— editable, runs on the server

Qué llevarse de la ejecución:

  • int sum: 12 muestra el operador + simple sumando dos valores int directamente — el caso cotidiano.
  • parsed sum: 100 confirma que Integer.parseInt convierte "42" y "58" en números antes de sumar, en lugar de concatenarlos en "4258".
  • double sum: 0.30000000000000004 es el error de representación en punto flotante de 0.1 + 0.2 — la prueba de que double no es exacto para los decimales, así que recurra a BigDecimal cuando importe la precisión.
  • 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 equivocado.

Practice

Práctica

Why does Integer.parseInt('42') + Integer.parseInt('58') give 100 while '42' + '58' gives '4258'?