¿Qué es?

Son los bloques fundamentales del lenguaje que permiten almacenar, manipular y operar información dentro de un programa.

  • Variables → Espacios de memoria con nombre
  • Tipos de datos → Definen qué tipo de valor almacena la variable
  • Operadores → Permiten realizar cálculos y comparaciones

Java define:

  • Tipos primitivos (stack, rápidos, bajo nivel)
  • Tipos de referencia (heap, objetos, más flexibles)

👉 Elegir mal el tipo impacta directamente en performance, precisión y bugs en producción

👉 Sin esto, no puedes construir lógica en ningún sistema

¿Para qué sirve?

En proyectos reales:

  • Manejar datos de usuarios (nombre, saldo, edad)
  • Procesar operaciones (pagos, cálculos, validaciones)
  • Tomar decisiones en el sistema

En sistemas reales:

  • Finanzas → precisión decimal
  • IoT → uso eficiente de memoria (byte, short)
  • Backend → validaciones, cálculos, lógica de negocio
  • Big Data → optimización de memoria

Conceptos clave

🔹 Tipos primitivos completos

TipoTamañoRango
byte1 byte-128 a 127
short2 bytes-32,768 a 32,767
int4 bytes-2^31 a 2^31 – 1
long8 bytes-2^63 a 2^63 – 1
float4 bytes±1.4E-45 a ±3.4E38 (~7 dígitos)
double8 bytes±4.9E-324 a ±1.7E308 (~15 dígitos)
char2 bytes0 a 65,535 (Unicode)
booleanJVMtrue / false

🔹 Tipos de referencia

  • String
  • Arrays (int[], String[])
  • Clases (Usuario, Cuenta)
  • Wrappers (Integer, Double, etc.)

Reglas importantes

  • Usa int por defecto para enteros
  • Usa long para grandes volúmenes (IDs, timestamps)
  • Usa double para cálculos generales
  • ⚠️ NO usar float/double para dinero
  • Para dinero → usar BigDecimal

Manejo de decimales con precisión (CRÍTICO)

Problema típico:

System.out.println(0.1 + 0.2);

Salida:

0.30000000000000004

👉 Esto ocurre por representación binaria

✅ Solución profesional: BigDecimal

import java.math.BigDecimal;

public class PrecisionDemo {
    public static void main(String[] args) {

        BigDecimal a = new BigDecimal("0.1");
        BigDecimal b = new BigDecimal("0.2");

        BigDecimal resultado = a.add(b);

        System.out.println(resultado); // 0.3 exacto
    }
}

Operadores

🔹 Aritméticos

+  -  *  /  %

🔹 Relacionales

==  !=  >  <  >=  <=

🔹 Lógicos

&&  ||  !

🔹 Asignación

=  +=  -=  *=  /=

Errores comunes

  • ❌ Usar tipos incorrectos (ej: int para dinero)
  • ❌ No inicializar variables
  • ❌ Comparar Strings con == (ERROR común)
  • ❌ Desbordamiento de datos (int muy pequeño)
  • ❌ No entender diferencia entre primitivo y objeto
  • ❌ Usar float/double para dinero
  • ❌ No usar sufijo L en long
long numero = 10000000000; // ERROR
long numero = 10000000000L; // OK
  • ❌ Comparar objetos con ==
  • ❌ Desbordamiento silencioso
int max = Integer.MAX_VALUE;
max++; // overflow

Ejemplo de código completo

import java.math.BigDecimal;

public class TiposDatosDemo {

    public static void main(String[] args) {
    
        // Tipos Primitivos
        byte edad = 30;
        short anio = 2025;
        int poblacion = 1000000;
        long distancia = 15000000000L;

        float precioFloat = 10.5f;
        double precioDouble = 10.5;

        char letra = 'A';
        boolean activo = true;

        String nombre = "Roger";

        // BigDecimal para dinero
        BigDecimal precio = new BigDecimal("99.99");
        BigDecimal impuesto = new BigDecimal("0.18");

        BigDecimal total = precio.add(precio.multiply(impuesto));

        System.out.println("Total: " + total);
    }
}

Ejemplo de vida real

Caso: Sistema de pagos (nivel banco)

BigDecimal saldo = new BigDecimal("1000.00");
BigDecimal compra = new BigDecimal("250.75");

if (saldo.compareTo(compra) >= 0) {
    saldo = saldo.subtract(compra);
}

👉 Esto evita errores de precisión en:

  • Transferencias
  • Cálculo de intereses
  • Facturación electrónica

Diagrama conceptual

MEMORIA[ STACK ]
├── byte
├── int
├── double
└── boolean

[ HEAP ]
├── String
├── Arrays
├── Objetos
└── BigDecimal

FLUJO:

Variable → Tipo → Memoria → Operación → Resultado

Uso en proyectos reales

Backend (Spring Boot):

public BigDecimal calcularTotal(BigDecimal precio, BigDecimal impuesto) {
    return precio.add(precio.multiply(impuesto));
}

DTO:

public class PagoDTO {
    private BigDecimal monto;
}

👉 En sistemas reales:

  • Nunca verás dinero en double
  • Siempre usarás BigDecimal

Conclusión

Dominar tipos de datos no es básico, es crítico.

Variables y operadores son la base de toda lógica.

Debes tener claro:

  • Qué tipo usar según contexto
  • Cuándo usar BigDecimal
  • Impacto en memoria y precisión
  • Buenas prácticas de nomenclatura
  • Diferencia entre primitivo vs referencia

👉 Esto impacta directamente en bugs, rendimiento y claridad del código.