Operadores de asignación en Java

📅 Actualizado en febrero 2026 ✍️ Ángel López ⏱️ 18 min de lectura ✓ Nivel principiante ★ ★ ★ ★ ★ (5/5)

📋 ¿Qué son los operadores de asignación?

Los operadores de asignación en Java son símbolos especiales que permiten almacenar un valor en una variable. Constituyen una de las operaciones más fundamentales de cualquier lenguaje de programación, ya que sin ellos sería imposible guardar datos en memoria para su posterior uso.

En Java, toda asignación es una operación binaria: tiene un operando a la izquierda (la variable que recibe el valor) y un operando a la derecha (el valor o expresión que se asigna). El resultado de una asignación es el propio valor asignado, lo que permite encadenar asignaciones o usarlas dentro de expresiones más complejas.

💡 Dato clave: Java dispone de 12 operadores de asignación en total: el operador simple (=) y 11 operadores compuestos que combinan una operación aritmética o a nivel de bits con la asignación. Dominar todos ellos permite escribir código más conciso y profesional.

A diferencia de otros lenguajes como Pascal, que utilizan el símbolo := para la asignación, Java emplea el signo igual =. Esto puede generar confusión con el operador de comparación ==, especialmente para quienes vienen de un contexto matemático donde = significa igualdad.

✏️ El operador de asignación simple (=)

El operador de asignación simple = es el más básico y utilizado. Su función es evaluar la expresión del lado derecho y almacenar el resultado en la variable del lado izquierdo, sustituyendo cualquier valor que la variable tuviera previamente.

Sintaxis general

Java
// Sintaxis:  variable = expresión;

// Asignación de valores literales
int edad = 25;
double salario = 2850.50;
char inicial = 'A';
boolean activo = true;
String nombre = "María García";

// Asignación del resultado de una expresión
int suma = 10 + 20;               // suma = 30
double promedio = (8.5 + 9.0) / 2; // promedio = 8.75
int cuadrado = edad * edad;        // cuadrado = 625

Es fundamental comprender que el operador = en Java no expresa igualdad matemática. La instrucción x = x + 1 no tiene sentido en matemáticas (ningún número es igual a sí mismo más uno), pero en Java es perfectamente válida: significa «toma el valor actual de x, súmale 1 y almacena el resultado de nuevo en x».

Asignación en la declaración vs. asignación posterior

Java
// Opción 1: Declaración e inicialización simultánea
int contador = 0;

// Opción 2: Declaración primero, asignación después
int resultado;
resultado = calcularTotal();  // se asigna más adelante

// ⚠️ ERROR: usar variable local sin inicializar
int x;
System.out.println(x);  // Error de compilación:
                         // "variable x might not have been initialized"

⚠️ Regla importante: En Java, las variables locales (declaradas dentro de un método) deben inicializarse antes de usarse. El compilador rechazará cualquier intento de leer una variable local no inicializada. Las variables de instancia y de clase, en cambio, reciben valores por defecto (0, false, null).

🔄 Compatibilidad de tipos en la asignación

Java es un lenguaje de tipado estático y fuerte, lo que significa que el compilador verifica en tiempo de compilación que el tipo del valor asignado sea compatible con el tipo de la variable receptora. No todas las combinaciones de tipos son válidas.

Conversiones de ampliación (widening) — automáticas

Java permite automáticamente la asignación cuando el tipo destino puede representar todos los valores del tipo origen sin pérdida de información. Estas se llaman conversiones de ampliación (widening conversions).

Java
// Conversiones de ampliación: siempre seguras
byte b = 42;
short s = b;      // byte → short  ✅
int i = s;        // short → int   ✅
long l = i;       // int → long    ✅
float f = l;      // long → float  ✅ (posible pérdida de precisión)
double d = f;     // float → double ✅

// Cadena de ampliación completa:
// byte → short → int → long → float → double
//                char → int → long → float → double

Conversiones de estrechamiento (narrowing) — requieren casting

Cuando el tipo destino es más pequeño que el tipo origen, existe riesgo de pérdida de datos. Java exige un casting explícito para estas conversiones, obligando al programador a asumir la responsabilidad.

Java
// Conversiones de estrechamiento: requieren casting explícito
double precio = 29.99;
int precioEntero = (int) precio;   // precioEntero = 29 (se trunca)

long distancia = 150_000_000L;
int distanciaInt = (int) distancia; // Posible pérdida si > Integer.MAX_VALUE

// ⚠️ ERROR sin casting:
// int x = 3.14;  // Error: incompatible types: possible lossy conversion

// Caso especial: literales enteros pequeños a byte/short
byte b1 = 127;    // ✅ El compilador verifica que cabe
byte b2 = 128;    // ❌ Error: incompatible types
byte b3 = (byte) 128;  // ✅ Compila, pero b3 = -128 (overflow)

Tabla de compatibilidad de tipos

Tipo origen → byte short int long float double char
→ byte Cast Cast Cast Cast Cast Cast
→ short Auto Cast Cast Cast Cast Cast
→ int Auto Auto Cast Cast Cast Auto
→ long Auto Auto Auto Cast Cast Auto
→ float Auto Auto Auto Auto Cast Auto
→ double Auto Auto Auto Auto Auto Auto
→ char Cast Cast Cast Cast Cast Cast

Auto = conversión automática (widening). Cast = requiere casting explícito (narrowing). Observa que char no se amplía automáticamente a byte ni a short porque char es un tipo sin signo (0 a 65535), mientras que byte y short son con signo.

⚡ Operadores de asignación compuestos

Los operadores de asignación compuestos (también llamados operadores abreviados o compound assignment operators) combinan una operación aritmética con la asignación en un solo paso. Son una forma más concisa y legible de escribir operaciones que modifican el valor de una variable.

Tabla de operadores compuestos aritméticos

Operador Nombre Ejemplo Equivalente a Resultado (si x = 10)
+= Suma y asigna x += 3 x = (tipo)(x + 3) x = 13
-= Resta y asigna x -= 4 x = (tipo)(x - 4) x = 6
*= Multiplica y asigna x *= 2 x = (tipo)(x * 2) x = 20
/= Divide y asigna x /= 3 x = (tipo)(x / 3) x = 3 (división entera)
%= Módulo y asigna x %= 3 x = (tipo)(x % 3) x = 1

Ejemplos prácticos detallados

Java
public class OperadoresCompuestos {
    public static void main(String[] args) {
        // --- Operador += (suma y asigna) ---
        int puntos = 100;
        puntos += 25;     // puntos = 125
        puntos += 10;     // puntos = 135
        System.out.println("Puntos: " + puntos);  // 135

        // --- Operador -= (resta y asigna) ---
        double saldo = 1500.00;
        saldo -= 250.75;  // saldo = 1249.25
        System.out.println("Saldo: " + saldo);

        // --- Operador *= (multiplica y asigna) ---
        int base = 2;
        base *= 3;   // base = 6
        base *= 5;   // base = 30
        System.out.println("Base: " + base);  // 30

        // --- Operador /= (divide y asigna) ---
        int total = 100;
        total /= 3;  // total = 33 (división entera, se trunca)
        System.out.println("Total: " + total);  // 33

        double preciso = 100.0;
        preciso /= 3;  // preciso = 33.333...
        System.out.println("Preciso: " + preciso);

        // --- Operador %= (módulo y asigna) ---
        int numero = 17;
        numero %= 5;  // numero = 2 (resto de 17/5)
        System.out.println("Resto: " + numero);  // 2

        // --- Uso con String (solo +=) ---
        String saludo = "Hola";
        saludo += " mundo";     // saludo = "Hola mundo"
        saludo += "!";          // saludo = "Hola mundo!"
        System.out.println(saludo);
    }
}

Buena práctica: El operador += con String es cómodo para concatenaciones simples, pero si necesitas realizar muchas concatenaciones en un bucle, utiliza StringBuilder en su lugar. Cada uso de += con String crea un nuevo objeto en memoria, lo que puede afectar al rendimiento.

🔧 Operadores de asignación a nivel de bits

Java también ofrece operadores compuestos para las operaciones a nivel de bits (bitwise). Estos operadores trabajan directamente con la representación binaria de los números enteros y son esenciales en programación de sistemas, procesamiento de señales, criptografía y manipulación de banderas (flags).

Tabla de operadores bitwise compuestos

Operador Nombre Ejemplo Equivalente a
&= AND bits y asigna x &= 0xFF x = x & 0xFF
|= OR bits y asigna x |= 0x04 x = x | 0x04
^= XOR bits y asigna x ^= 0xFF x = x ^ 0xFF
<<= Desplazamiento izquierdo y asigna x <<= 2 x = x << 2
>>= Desplazamiento derecho con signo y asigna x >>= 1 x = x >> 1
>>>= Desplazamiento derecho sin signo y asigna x >>>= 1 x = x >>> 1

Ejemplo práctico: sistema de permisos con banderas

Java
public class SistemaPermisos {
    // Definición de permisos como constantes de bits
    static final int PERMISO_LECTURA    = 0b0001;  // 1
    static final int PERMISO_ESCRITURA  = 0b0010;  // 2
    static final int PERMISO_EJECUCION  = 0b0100;  // 4
    static final int PERMISO_ADMIN      = 0b1000;  // 8

    public static void main(String[] args) {
        int permisos = 0;  // Sin permisos

        // Activar permisos con |= (OR)
        permisos |= PERMISO_LECTURA;     // permisos = 0001
        permisos |= PERMISO_ESCRITURA;   // permisos = 0011
        permisos |= PERMISO_EJECUCION;   // permisos = 0111

        // Verificar permiso con &
        boolean puedeLeer = (permisos & PERMISO_LECTURA) != 0;  // true
        boolean esAdmin = (permisos & PERMISO_ADMIN) != 0;      // false

        // Desactivar un permiso con &= y complemento
        permisos &= ~PERMISO_ESCRITURA;  // permisos = 0101

        // Alternar un permiso con ^= (XOR)
        permisos ^= PERMISO_ADMIN;  // Activa admin: permisos = 1101
        permisos ^= PERMISO_ADMIN;  // Desactiva admin: permisos = 0101

        System.out.println("Permisos finales: " + Integer.toBinaryString(permisos));
    }
}

💡 ¿Por qué usar bits para permisos? Esta técnica permite almacenar múltiples estados booleanos en un solo int, ocupando menos memoria y permitiendo operaciones extremadamente rápidas. Es el mismo principio que usa el sistema de permisos de archivos en Linux (rwx = 421).

🎯 Casting implícito en asignaciones compuestas

Una de las diferencias más importantes entre la asignación simple y la compuesta es que los operadores compuestos incluyen un casting implícito al tipo de la variable destino. Este detalle, recogido en la especificación del lenguaje Java (JLS §15.26.2), tiene implicaciones prácticas que todo programador debe conocer.

Java
// ¿Por qué compila uno y otro no?

byte b = 10;

// ❌ ERROR de compilación:
// b = b + 1;   // b + 1 se promueve a int, no cabe en byte

// ✅ Compila correctamente:
b += 1;         // Equivale a: b = (byte)(b + 1)

// Otro ejemplo con short:
short s = 100;
// s = s * 2;   // ❌ Error: s * 2 es int
s *= 2;         // ✅ Equivale a: s = (short)(s * 2)

// Ejemplo con char:
char c = 'A';   // valor Unicode 65
// c = c + 1;   // ❌ Error: c + 1 es int
c += 1;         // ✅ c = (char)(c + 1) → 'B'
System.out.println(c);  // B

⚠️ Cuidado con el overflow silencioso: El casting implícito puede enmascarar errores. Por ejemplo, si byte b = 127 y hacemos b += 1, el resultado es -128 (overflow), no 128. Java no lanza ninguna excepción; simplemente el valor «da la vuelta» según las reglas del complemento a dos.

Java
// Demostración de overflow silencioso
byte b = 127;        // Valor máximo de byte
b += 1;              // b = (byte)(127 + 1) = (byte)(128)
System.out.println(b);  // -128 (¡overflow silencioso!)

// ¿Por qué ocurre?
// 128 en binario: 00000000 10000000
// Truncado a byte:          10000000 = -128 en complemento a dos

🔗 Asignación múltiple y encadenada

Java permite encadenar varias asignaciones en una misma instrucción gracias a que el operador = devuelve el valor asignado. La evaluación se realiza de derecha a izquierda, lo que se conoce como asociatividad a derechas.

Java
// Asignación encadenada
int a, b, c;
a = b = c = 100;
// Se evalúa: c = 100 → b = 100 → a = 100
// Las tres variables valen 100

// Declaración múltiple con asignación
int x = 1, y = 2, z = 3;

// Intercambio de valores (requiere variable auxiliar)
int temp = x;
x = y;
y = temp;

// Asignación en contextos de expresión
int[] numeros = {5, 10, 15, 20};
int indice;
int valor = numeros[indice = 2];  // indice = 2, valor = 15
System.out.println("Índice: " + indice + ", Valor: " + valor);

⚠️ Uso con moderación: Aunque la asignación encadenada y la asignación dentro de expresiones son legales en Java, pueden dificultar la lectura del código. Usa la asignación encadenada solo cuando todas las variables deben tener el mismo valor inicial. Evita la asignación dentro de condiciones o expresiones complejas.

🚫 Errores comunes con operadores de asignación

Conocer los errores más habituales permite evitarlos desde el primer día. A continuación se describen las trampas más frecuentes que encuentran los programadores, desde principiantes hasta experimentados.

Error 1: Confundir = con ==

Java
int x = 5;

// ❌ ERROR de compilación (Java te protege):
// if (x = 10) { ... }  // x = 10 devuelve int, no boolean

// ✅ CORRECTO:
if (x == 10) { ... }  // Compara si x es igual a 10

// ⚠️ CASO PELIGROSO con boolean:
boolean encontrado = false;
if (encontrado = true) {   // ¡COMPILA! Asigna true y evalúa true
    System.out.println("Siempre se ejecuta");
}
// Lo correcto era:
if (encontrado == true) { ... }
// O simplemente:
if (encontrado) { ... }

Error 2: División entera inesperada con /=

Java
// Problema: resultado truncado
int total = 7;
total /= 2;
System.out.println(total);  // 3, no 3.5

// Solución: usar double desde el inicio
double totalPreciso = 7.0;
totalPreciso /= 2;
System.out.println(totalPreciso);  // 3.5

Error 3: Asignación a una constante

Java
final int MAX = 100;
// MAX = 200;       // ❌ Error: cannot assign a value to final variable
// MAX += 50;       // ❌ Mismo error: los operadores compuestos
                    //    también son asignaciones

final int[] datos = {1, 2, 3};
// datos = new int[5];  // ❌ No se puede reasignar la referencia
datos[0] = 99;          // ✅ Sí se puede modificar el contenido

Error 4: Pérdida de precisión inadvertida

Java
// float tiene solo ~7 dígitos de precisión
float f = 1_000_000.0f;
f += 0.1f;
System.out.println(f);  // 1000000.1 (¿o no?)
// En realidad: 1000000.125 (¡error de representación!)

// Para cálculos financieros, usar BigDecimal:
import java.math.BigDecimal;
BigDecimal precio = new BigDecimal("19.99");
BigDecimal descuento = new BigDecimal("2.50");
BigDecimal precioFinal = precio.subtract(descuento);
System.out.println(precioFinal);  // 17.49 (exacto)

🏗️ Ejemplo integrador: sistema de gestión de inventario

El siguiente ejemplo muestra un sistema completo de gestión de inventario que emplea todos los tipos de operadores de asignación vistos en este artículo. Cada uso del operador se comenta para facilitar la comprensión.

Java
/**
 * Sistema de gestión de inventario que demuestra todos
 * los operadores de asignación de Java.
 */
public class GestionInventario {

    // Banderas de estado del producto (operadores bitwise)
    static final int ESTADO_ACTIVO     = 0b0001;  // 1
    static final int ESTADO_DESCUENTO  = 0b0010;  // 2
    static final int ESTADO_NOVEDAD    = 0b0100;  // 4
    static final int ESTADO_AGOTADO    = 0b1000;  // 8

    public static void main(String[] args) {
        // --- Asignación simple (=) ---
        String nombreProducto = "Portátil ProBook X5";
        double precioBase = 899.99;
        int stock = 50;
        int vendidos = 0;

        // --- Operador += (registrar ventas) ---
        System.out.println("=== Registro de ventas ===");
        vendidos += 5;   // Primera venta: 5 unidades
        vendidos += 12;  // Segunda venta: 12 unidades
        vendidos += 3;   // Tercera venta: 3 unidades
        System.out.println("Total vendidos: " + vendidos);  // 20

        // --- Operador -= (actualizar stock) ---
        stock -= vendidos;  // stock = 50 - 20 = 30
        System.out.println("Stock restante: " + stock);

        // --- Operador *= (aplicar incremento de precio) ---
        double precioVenta = precioBase;
        precioVenta *= 1.21;  // Aplicar 21% de IVA
        System.out.printf("Precio con IVA: %.2f€%n", precioVenta);

        // --- Operador /= (calcular precio medio) ---
        double ingresoTotal = precioVenta * vendidos;
        double ticketMedio = ingresoTotal;
        ticketMedio /= vendidos;  // Ingreso total / unidades
        System.out.printf("Ticket medio: %.2f€%n", ticketMedio);

        // --- Operador %= (calcular paquetes completos) ---
        int unidadesPorCaja = 6;
        int cajasCompletas = stock / unidadesPorCaja;  // 5 cajas
        int unidadesSueltas = stock;
        unidadesSueltas %= unidadesPorCaja;  // 30 % 6 = 0 sueltas
        System.out.println("Cajas completas: " + cajasCompletas);
        System.out.println("Unidades sueltas: " + unidadesSueltas);

        // --- Operadores bitwise (gestión de estados) ---
        int estado = 0;
        estado |= ESTADO_ACTIVO;     // Activar producto
        estado |= ESTADO_NOVEDAD;    // Marcar como novedad
        estado |= ESTADO_DESCUENTO;  // Añadir descuento

        System.out.println("\n=== Estado del producto ===");
        System.out.println("Activo: " + ((estado & ESTADO_ACTIVO) != 0));
        System.out.println("Novedad: " + ((estado & ESTADO_NOVEDAD) != 0));
        System.out.println("Descuento: " + ((estado & ESTADO_DESCUENTO) != 0));

        // Quitar novedad tras 30 días
        estado &= ~ESTADO_NOVEDAD;   // Desactivar bit de novedad
        System.out.println("Novedad (tras 30 días): " +
            ((estado & ESTADO_NOVEDAD) != 0));  // false

        // --- Resumen de concatenación con += ---
        String resumen = "";
        resumen += "Producto: " + nombreProducto + "\n";
        resumen += "Precio base: " + precioBase + "€\n";
        resumen += "Vendidos: " + vendidos + " uds.\n";
        resumen += "Stock: " + stock + " uds.\n";
        resumen += "Estado: " + Integer.toBinaryString(estado);
        System.out.println("\n=== Resumen ===");
        System.out.println(resumen);
    }
}

📝 Ejercicios prácticos resueltos

Los siguientes ejercicios están diseñados para consolidar los conceptos vistos en este artículo, desde el nivel más básico hasta aplicaciones avanzadas con operadores bitwise.

Ejercicio 1: Cálculo de nómina (nivel básico)

Escribe un programa que calcule el salario neto de un empleado. Parte de un salario bruto de 2.500€, aplica una retención de IRPF del 15% y una cotización a la Seguridad Social del 6,35%. Usa operadores de asignación compuestos para todos los cálculos.

🔍 Ver solución
Java
public class CalculoNomina {
    public static void main(String[] args) {
        double salarioBruto = 2500.00;

        // Calcular retenciones
        double irpf = salarioBruto;
        irpf *= 0.15;   // irpf = 375.00

        double seguridadSocial = salarioBruto;
        seguridadSocial *= 0.0635;  // seguridadSocial = 158.75

        // Calcular salario neto
        double salarioNeto = salarioBruto;
        salarioNeto -= irpf;              // 2500 - 375 = 2125
        salarioNeto -= seguridadSocial;   // 2125 - 158.75 = 1966.25

        System.out.printf("Salario bruto:      %8.2f€%n", salarioBruto);
        System.out.printf("IRPF (15%%):         %8.2f€%n", irpf);
        System.out.printf("Seg. Social (6.35%%): %7.2f€%n", seguridadSocial);
        System.out.printf("Salario neto:       %8.2f€%n", salarioNeto);
    }
}

Ejercicio 2: Conversor de unidades de tiempo (nivel intermedio)

Dado un número total de segundos (por ejemplo, 90061), descomponlo en días, horas, minutos y segundos restantes utilizando únicamente los operadores /= y %=.

🔍 Ver solución
Java
public class ConversorTiempo {
    public static void main(String[] args) {
        int totalSegundos = 90061;
        int restante = totalSegundos;

        // Extraer días
        int dias = restante;
        dias /= 86400;          // 90061 / 86400 = 1 día
        restante %= 86400;      // 90061 % 86400 = 3661 seg restantes

        // Extraer horas
        int horas = restante;
        horas /= 3600;          // 3661 / 3600 = 1 hora
        restante %= 3600;       // 3661 % 3600 = 61 seg restantes

        // Extraer minutos
        int minutos = restante;
        minutos /= 60;          // 61 / 60 = 1 minuto
        restante %= 60;         // 61 % 60 = 1 segundo restante

        System.out.println(totalSegundos + " segundos = " +
            dias + "d " + horas + "h " + minutos + "m " + restante + "s");
        // Salida: 90061 segundos = 1d 1h 1m 1s
    }
}

Ejercicio 3: Cifrado XOR simple (nivel avanzado)

Implementa un cifrado XOR básico que cifre y descifre un mensaje usando una clave numérica. Utiliza el operador ^= para transformar cada carácter.

🔍 Ver solución
Java
public class CifradoXOR {
    public static String cifrar(String mensaje, int clave) {
        char[] caracteres = mensaje.toCharArray();
        for (int i = 0; i < caracteres.length; i++) {
            caracteres[i] ^= clave;  // XOR cada carácter con la clave
        }
        return new String(caracteres);
    }

    public static void main(String[] args) {
        String original = "Hola Java";
        int clave = 42;

        // Cifrar
        String cifrado = cifrar(original, clave);
        System.out.println("Original: " + original);
        System.out.println("Cifrado:  " + cifrado);

        // Descifrar (aplicar XOR de nuevo con la misma clave)
        String descifrado = cifrar(cifrado, clave);
        System.out.println("Descifrado: " + descifrado);

        // ¿Por qué funciona?
        // XOR tiene la propiedad: (A ^ B) ^ B = A
        // Cifrar:    'H' ^ 42 = 'b'
        // Descifrar: 'b' ^ 42 = 'H'
    }
}

Ejercicio 4: Simulador de interés compuesto (nivel intermedio)

Escribe un programa que simule el crecimiento de una inversión de 10.000€ a un interés anual del 5% durante 10 años, mostrando el saldo cada año. Usa el operador *= para aplicar el interés.

🔍 Ver solución
Java
public class InteresCompuesto {
    public static void main(String[] args) {
        double capital = 10_000.00;
        double tasaAnual = 1.05;  // 5% de interés
        int anios = 10;

        System.out.println("Año | Capital");
        System.out.println("-----|-------------");
        System.out.printf("  0  | %10.2f€%n", capital);

        for (int anio = 1; anio <= anios; anio++) {
            capital *= tasaAnual;  // Aplicar interés compuesto
            System.out.printf("  %d  | %10.2f€%n", anio, capital);
        }

        // Resultado: después de 10 años, ~16.288,95€
    }
}

✅ Buenas prácticas y recomendaciones

Después de dominar la mecánica de los operadores de asignación, es importante conocer las convenciones y buenas prácticas que distinguen el código profesional del código de principiante.

Usa operadores compuestos para mejorar la legibilidad. total += precio es más claro y directo que total = total + precio, especialmente cuando la variable tiene un nombre largo como contadorDeErroresCriticos.

Inicializa siempre las variables. Aunque Java asigna valores por defecto a los campos de instancia, las variables locales deben inicializarse explícitamente. Acostúmbrate a declararlas con un valor inicial siempre que sea posible: int contador = 0; en lugar de int contador;.

⚠️ Cuidado con byte y short. Si trabajas con estos tipos, recuerda que las operaciones aritméticas los promueven a int. Los operadores compuestos realizan el casting automático, pero la versión expandida no. Sé consciente del overflow silencioso que puede producirse.

💡 Para cálculos financieros, usa BigDecimal. Los tipos float y double tienen errores de representación inherentes al formato IEEE 754. Si la precisión decimal importa (dinero, facturación, impuestos), utiliza siempre java.math.BigDecimal.

⚠️ Evita la asignación dentro de condiciones. Aunque if (resultado = metodo()) puede compilar si el tipo es boolean, es una fuente habitual de bugs. Separa la asignación y la condición en líneas diferentes para máxima claridad.

❓ Preguntas frecuentes sobre Operadores de asignación en Java

Las dudas más comunes respondidas de forma clara y directa.

El operador = es el operador de asignación: almacena un valor en una variable (por ejemplo, x = 5). El operador == es el operador de comparación: evalúa si dos valores son iguales y devuelve true o false (por ejemplo, x == 5). Confundir ambos es uno de los errores más frecuentes en programación Java.
El operador += es un operador de asignación compuesto que suma el valor del lado derecho al valor actual de la variable del lado izquierdo y almacena el resultado. Por ejemplo, x += 3 es equivalente a x = x + 3. Además de sumar números, += también puede concatenar cadenas: texto += " mundo" equivale a texto = texto + " mundo".
Los operadores de asignación compuestos como +=, -=, *= incluyen un casting implícito automático al tipo de la variable destino. Esto es parte de la especificación del lenguaje Java (JLS §15.26.2). Por ejemplo, si x es byte, x += 1 equivale a x = (byte)(x + 1), no a x = x + 1, que daría error de compilación porque x + 1 se promueve a int.
No directamente con tipos numéricos. En Java, la condición de un if debe ser de tipo boolean. Escribir if (x = 5) genera un error de compilación porque x = 5 devuelve un int, no un boolean. Sin embargo, si la variable es boolean, sí es legal: if (b = true) compila, aunque es una mala práctica porque probablemente se quería escribir if (b == true) o simplemente if (b).
Java tiene 12 operadores de asignación en total: el operador simple (=) y 11 operadores compuestos (+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=). Los cinco primeros se usan con aritmética general, y los seis restantes operan a nivel de bits.
El operador >>= realiza un desplazamiento a la derecha con signo: rellena los bits vacantes con el bit de signo (0 para positivos, 1 para negativos), preservando el signo del número. El operador >>>= realiza un desplazamiento a la derecha sin signo: siempre rellena con ceros, independientemente del signo. Por ejemplo, -8 >>= 1 da -4, pero -8 >>>= 1 da un número positivo muy grande.
Valora este artículo

💬 Foro de discusión

¿Tienes dudas sobre Operadores de asignación en Java? Comparte tu pregunta con la comunidad.

¿Tienes cuenta? o comenta como invitado ↓

Todavía no hay mensajes. ¡Sé el primero en participar!