SLIDE 1 / 5

1. Los 8 Tipos Primitivos en Memoria

Java no guarda objetos para todo. Los primitivos son valores matemáticos directos almacenados en la pila de ejecución, sin sobrecarga de punteros. Se dividen en enteros, punto flotante, carácter y booleano.

Enteros (con signo) byte 8 bits short 16 bits int (estándar) 32 bits long (sufijo L) 64 bits Complemento a dos · Números exactos Flotantes, Char y Boolean float (F) 32 bits double 64 bits char (UTF-16 sin signo) 16 bits boolean (true / false) 1 bit (JVM flag) IEEE 754 & Unicode estándar
byte (8 bits) Ficha técnica en memoria
Rango admisible: -128 hasta 127
Valor por defecto en clase: 0
Ejemplo de declaración: byte edad = 25;

Ideal para buffers de red o streaming de archivos donde el consumo de RAM debe ser mínimo.

2. Casting de Tipos: Ensanchamiento vs Truncado

Cuando un tipo pequeño se asigna a uno más grande (Widening), la conversión es automática y segura. Pero al forzar un tipo mayor en uno menor (Narrowing), Java descarta los bits superiores sin avisar, produciendo desbordamientos.

int original = 130; (32 bits en memoria) 00000000 00000000 00000000 10000010 ← Bits descartados por narrowing byte res = (byte) 130; 10000010 Resultado = -126 !
Simulador de Overflow (Casting a byte)
Valor int: 130
Valor byte resultante: -126
Bits conservados (8): 10000010

El bit más significativo es 1, indicando un número negativo en complemento a dos (-128 + 2 = -126).

3. La Trampa de la División Entera y el Módulo (%)

En Java, operar entre enteros siempre da un entero. Si hacés 5 / 2, el resultado es 2, no 2.5: la parte decimal se desecha. El operador módulo (%) rescata el residuo de la división.

5 / 2 (Entero / Entero) 2 Se trunca la fracción .5 5 % 2 = 1 (resto) 5.0 / 2 (Double / Entero) 2.5 El entero 2 se ensancha a 2.0 double prom = (double) 5 / 2;
Laboratorio de Operaciones
Expresión Java: int resultado = 5 / 2;
Tipo inferido: int
Valor en memoria: 2

¡Cuidado con promedios! Si sumás 3 enteros y dividís por 3, perderás los decimales salvo que dividas por 3.0.

4. Evaluación de Cortocircuito (&& y ||)

Los operadores && y || no evalúan el segundo operando si el primero ya determina el resultado global. Esto previene catástrofes como NullPointerException o divisiones por cero.

user != null FALSE (Abierto) user.getEdad() >= 18 [NO EVALUADO] ¡Protegido de NPE! OFF Resultado: false
Simulador de Circuito
Condición: user != null && user.getEdad() >= 18
Paso 1 (user != null): false
Paso 2 (getEdad()): OMITIDO (Cortocircuito)

Al ser el primer operando falso en un &&, Java no evalúa la derecha. Si usaras el operador simple &, Java evaluaría la derecha y lanzaría NullPointerException.

5. Inmutabilidad y Constantes con final

La palabra clave final impide que una variable sea reasignada una vez inicializada. Para verdaderas constantes universales, se combina con static y se nombra en UPPER_SNAKE_CASE.

final double PI = 3.14159; VALOR INMUTABLE PI = 3.14; javac Error: cannot assign a value to final

Buenas Prácticas de Tipos en Java

  • Elegir int por defecto: Para números enteros, int es el tipo nativo óptimo en CPU; usar long solo para IDs o marcas de tiempo gigantes.
  • Cuidado con Narrowing: Hacer cast manual descarta bits superiores silenciosamente en complemento a dos.
  • Divisiones exactas: Si querés decimales, asegurá que al menos un operando tenga .0 o cast a double.
  • Siempre && y ||: Usar operadores de cortocircuito para proteger llamadas sobre variables que podrían ser null.