Manejar desbordamiento y subdesbordamiento de enteros en Java
- Descripción general del desbordamiento y subdesbordamiento de enteros en Java
- Desbordamiento de enteros en Java
- Subdesbordamiento de enteros en Java
Este artículo describe el desbordamiento y subdesbordamiento de un tipo de datos entero y el manejo de este problema.
Descripción general del desbordamiento y subdesbordamiento de enteros en Java
Puede enfrentar un error de desbordamiento o subdesbordamiento si trabaja con valores enteros. Ocurre cuando declaramos una variable incorrectamente, como asignar un valor que está fuera de rango para el tipo de datos declarado.
Como sabemos, hay cuatro niveles de tipos de datos enteros que contienen diferentes tamaños que se detallan a continuación:
Tipo de datos | Tamaño |
---|---|
byte |
8 bits |
short |
16 bits |
int |
32 bits |
long |
64 bits |
Si consideramos el int
en Java, tiene un rango de valores que podemos asignar. Como ya sabemos, ese tipo de datos int
tiene un tamaño de 32-bits
; entonces, el rango de valores aceptados en int
está entre -2147483648
a 2147483647
.
Puede obtener rápidamente el valor máximo y mínimo utilizando Integer.MAX_VALUE
e Integer.MIN_VALUE
.
Desbordamiento de enteros en Java
Aquí, veremos la ocurrencia del desbordamiento de enteros y su manejo.
Ocurrencia de desbordamiento de enteros
Código de ejemplo:
public class IntegerOverflow {
public static void main(String[] args) {
int Intvalue = Integer.MAX_VALUE - 1;
for (int i = 0; i < 4; i++) {
System.out.println(Intvalue);
Intvalue = Math.addExact(Intvalue, 1);
}
}
}
Ahora, cuando ejecute el programa anterior, la consola le mostrará el siguiente resultado:
2147483646
2147483647
Exception in thread "main" java.lang.ArithmeticException: integer overflow
at java.base/java.lang.Math.addExact(Math.java:828)at IntegerOverflow.main(IntegerOverflow.java:9)
Manejar el desbordamiento de enteros
Necesitamos aumentar el rango de valores para resolver nuestro ejemplo anterior. En nuestro caso, encasillamos el entero
a largo
. Nuestro código actualizado para el ejemplo anterior será el siguiente.
Código de ejemplo:
public class IntegerOverflow {
public static void main(String[] args) {
int Intvalue = Integer.MAX_VALUE - 1;
long NewValue = (long) Intvalue; // Upgrading to new type
for (int i = 0; i < 4; i++) {
System.out.println(NewValue);
NewValue = Math.addExact(NewValue, 1);
}
}
}
Ahora verá el siguiente resultado en su consola.
2147483646
2147483647
2147483648
2147483649
Subdesbordamiento de enteros en Java
En esta sección, aprenderemos sobre el subdesbordamiento de enteros en Java y cómo podemos manejarlo.
Ocurrencia de subdesbordamiento de enteros
Código de ejemplo:
public class IntegerUnderflow {
public static void main(String[] args) {
int value = -2147483699; // Creating underflow intentionally
System.out.println(value - 1);
}
}
Ahora, cuando ejecute el programa anterior, la consola le mostrará el siguiente resultado:
/IntegerUnderflow.java:3: error: integer number too large
int value = -2147483699; // Creating underflow intentionally
^
1 error
Manejar subdesbordamiento de enteros
Para resolver el error anterior, necesitamos aumentar el rango del valor nuevamente y, para hacerlo, podemos encasillar el valor entero al siguiente nivel. Eche un vistazo al código compartido a continuación.
Código de ejemplo:
public class IntegerUnderflow {
public static void main(String[] args) {
long value = (long) -2147483638; // Type Casting
System.out.println(value - 1);
}
}
Ahora verá el siguiente resultado en su consola.
-2147483639
Por lo tanto, necesitamos aumentar el rango del tipo de datos en caso de resolver los problemas de desbordamiento o subdesbordamiento.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedInArtículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase