Saltar al contenido principal

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:

TipoTamañoIntervaloEjemplo
byte8 bits (1 byte)-128 a 127byte b = 100;
short16 bits (2 bytes)-32.768 a 32.767short s = 300;
int32 bits (4 bytes)-2^31 a 2^31-1int i = 50000;
long64 bits (8 bytes)-2^63 a 2^63-1long l = 9000000000L;
float32 bits (4 bytes)-3.4e−038 a 3.4e+038float f = 3.14f;
double64 bits (8 bytes)-1.7e−308 a 1.7e+308double d = 3.141592653;
char16 bits (2 bytes)0 a 65535 (caracteres Unicode)char c = 'A';
boolean1 bittrue o falseboolean 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 arrays de 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 byte pero aún se quiere ahorrar memoria en comparación con int.

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 L al final del número para especificar que es un long.

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 float deben tener una f al final para diferenciarlos de los double.

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.

Comillas simples para char

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: true o false.
  • 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:

  • maxInt contiene el valor máximo de un int.
  • Al sumar 1 a maxInt, el valor excede el límite y rebota al valor mínimo de un int (-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).