Tipos de datos
En Java, los tipos de datos primitivos son los tipos más básicos que el lenguaje ofrece para almacenar información. Estos tipos no son objetos y se almacenan directamente en la memoria. Java ofrece 8 tipos de datos primitivos, que se dividen en numéricos, caracteres y lógicos.
Los 8 tipos primitivos en Java son:
| Tipo | Tamaño | Intervalo | Ejemplo |
|---|---|---|---|
byte | 8 bits (1 byte) | -128 a 127 | byte b = 100; |
short | 16 bits (2 bytes) | -32.768 a 32.767 | short s = 300; |
int | 32 bits (4 bytes) | -2^31 a 2^31-1 | int i = 50000; |
long | 64 bits (8 bytes) | -2^63 a 2^63-1 | long l = 9000000000L; |
float | 32 bits (4 bytes) | -3.4e−038 a 3.4e+038 | float f = 3.14f; |
double | 64 bits (8 bytes) | -1.7e−308 a 1.7e+308 | double d = 3.141592653; |
char | 16 bits (2 bytes) | 0 a 65535 (caracteres Unicode) | char c = 'A'; |
boolean | 1 bit | true o false | boolean b = true; |
Tipos numéricos enteros (sin decimales)
Estos tipos se usan para almacenar números enteros, sin parte decimal.
byte
Almacena números enteros pequeños.
- Tamaño: 8 bits (1 byte).
- Intervalo: de -128 a 127.
- Uso: Adecuado para almacenar pequeñas cantidades de datos y reducir el consumo de memoria en grandes
arraysde números enteros.
Ejemplo:
byte edad = 25;
short
Almacena números enteros de tamaño mediano.
- Tamaño: 16 bits (2 bytes).
- Intervalo: de -32.768 a 32.767.
- Uso: Útil cuando se necesita más rango que
bytepero aún se quiere ahorrar memoria en comparación conint.
Ejemplo:
short año = 2024;
int
El tipo más común para números enteros.
- Tamaño: 32 bits (4 bytes).
- Intervalo: de -2.147.483.648 a 2.147.483.647.
- Uso: Es el tipo predeterminado para la mayoría de los números enteros.
Ejemplo:
int poblacion = 1000000;
long
Para números enteros muy grandes.
- Tamaño: 64 bits (8 bytes).
- Intervalo: de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.
- Uso: Útil cuando se trabaja con cifras muy grandes como contadores o cifras financieras.
- Nota: Debe incluirse una
Lal final del número para especificar que es unlong.
Ejemplo:
long distanciaEstrellas = 12345678901234L;
Tipos numéricos de punto flotante (con decimales)
Estos tipos se usan para almacenar números con parte decimal.
float
Almacena números de punto flotante (con decimales) de precisión simple.
- Tamaño: 32 bits (4 bytes).
- Intervalo: Aproximadamente de 3.4e−038 a 3.4e+038.
- Uso: Adecuado para cálculos que no requieren gran precisión.
- Nota: Los valores
floatdeben tener unafal final para diferenciarlos de losdouble.
Ejemplo:
float temperatura = 23.7f;
double
Almacena números de punto flotante de precisión doble.
- Tamaño: 64 bits (8 bytes).
- Intervalo: Aproximadamente de 1.7e−308 a 1.7e+308.
- Uso: Es el tipo predeterminado para números decimales en Java y es adecuado para cálculos más precisos.
Ejemplo:
double precio = 19.99;
Tipo carácter (char)
El tipo de datos char almacena un único carácter Unicode.
- Tamaño: 16 bits (2 bytes).
- Intervalo: de 0 a 65.535 (incluye caracteres de diferentes alfabetos, símbolos, etc.).
- Uso: Útil para almacenar letras, números o cualquier otro carácter en formato Unicode.
Ejemplo:
char inicial = 'A';
Java utiliza la codificación Unicode que consiste en identificar cada carácter mediante un número único llamado code point. Este puede representarse en decimal (de 0 a 65535), o con número de 4 cifras hexadecimales.
A la hora de seleccionar un carácter se puede utilizar su codificación Unicode o el propio carácter si es posible escribirlo mediante teclado.
char c;
c = 'a';
c = 97; // Se asigna el valor 'a' mediante un número decimal que se corresponde con ese carácter
c = '\u0061'; // Se asigna el valor 'a' mediante un número hexadecimal que se corresponde con ese carácter
Unicode funciona de modo similar a lo visto en Python con ASCII, pero Unicode cuenta con muchos más caracteres. El código ASCII también está incluido en Unicode, constituyendo los 128 primeros caracteres.
Los valores de tipo char deben estar entre comillas simples ('A').
En cambio las cadenas de texto deben estar entre comillas dobles ("A")
Tipo lógico (boolean)
El tipo de datos boolean almacena valores lógicos.
- Tamaño: No está definido exactamente en términos de bits, pero almacena dos valores posibles:
trueofalse. - Uso: Usado para controlar la lógica de los programas (condiciones, bucles, etc.).
Ejemplo:
boolean activo = true;
Overflow
En Java, el overflow ocurre cuando un valor supera los límites del tipo de dato en el que se almacena. Esto es común con tipos de datos primitivos como int, byte, etc. Si se intenta almacenar un valor más grande que el máximo permitido o menor que el mínimo, el valor sufre un overflow o underflow, y la variable vuelve al valor opuesto dentro de su rango.
Por ejemplo, un int en Java es un número entero de 32 bits (4 bytes) con rango de valores entre -2,147,483,648 (mínimo) y 2,147,483,647 (máximo). Si realizamos una operación que resulta en un valor superior a 2,147,483,647 o inferior a -2,147,483,648, ocurre un overflow o underflow, y el valor “rebota” al extremo opuesto.
En el siguiente ejemplo, intentamos sumar 1 al valor máximo de un int, lo que causa un overflow:
public class App {
public static void main(String[] args) {
int maxInt = Integer.MAX_VALUE; // Valor máximo de int (2,147,483,647)
System.out.println("Valor máximo de int: " + maxInt);
int overflowedInt = maxInt + 1; // Esto causa un overflow
System.out.println("Después del overflow: " + overflowedInt); // Resultado: -2,147,483,648
}
}
Salida:
Valor máximo de int: 2147483647
Después del overflow: -2147483648
En el ejemplo:
maxIntcontiene el valor máximo de unint.- Al sumar 1 a
maxInt, el valor excede el límite y rebota al valor mínimo de unint(-2,147,483,648), causando un overflow.
Lo mismo ocurre en underflow cuando restas 1 al valor mínimo de un int (el valor mínimo se almacena en la constante Integer.MIN_VALUE).