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); // 12Este 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); // 100Un 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.
| Enfoque | Comportamiento en desbordamiento | Use cuando |
|---|---|---|
int + int | Da la vuelta silenciosamente | Valores cómodamente dentro del rango de int |
(long) a + b | Calcula en 64 bits, sin vuelta | La suma puede exceder int pero cabe en long |
Math.addExact(a, b) | Lanza ArithmeticException | Debe detectar el desbordamiento, no absorberlo |
BigInteger / BigDecimal | Precisión arbitraria | Los 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 ArithmeticExceptionUn ejemplo resuelto
Qué llevarse de la ejecución:
int sum: 12muestra el operador+simple sumando dos valoresintdirectamente — el caso cotidiano.parsed sum: 100confirma queInteger.parseIntconvierte"42"y"58"en números antes de sumar, en lugar de concatenarlos en"4258".double sum: 0.30000000000000004es el error de representación en punto flotante de0.1 + 0.2— la prueba de quedoubleno es exacto para los decimales, así que recurra aBigDecimalcuando importe la precisión.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 equivocado.
Practice
Why does Integer.parseInt('42') + Integer.parseInt('58') give 100 while '42' + '58' gives '4258'?