Saltar al contenido

Operadores lógicos en Java: &&, ||, ! frente a &, | y ^

Java tiene dos juegos de operadores sobre boolean: &&, || y ! son de cortocircuito, mientras que &, | y ^ evalúan los dos lados y son además los operadores bit a bit sobre enteros. Saber qué juego estás leyendo es la mayor parte de la batalla.

LógicaJavaNota
NOT A!a~ es solo para enteros
A AND Ba && b o a & b& evalúa los dos lados
A OR Ba || b o a | b| evalúa los dos lados
A XOR Ba ^ b o a != bLos dos son lógicos sobre boolean
A -> B!a || bNo hay operador de implicación
A <-> Ba == bIgualdad de dos valores boolean
TRUE, FALSEtrue, falseNo intercambiables con 1 y 0

!a, a && b y a || b son los operadores lógicos habituales y ligan en ese orden. a & b, a | b y a ^ b sobre dos valores boolean también son lógicos, con ^ como o exclusivo, pero siempre evalúan los dos operandos: x != null & x.isEmpty() lanza una excepción cuando x es null, mientras que la forma con && no. La precedencia coloca & por encima de ^ y este por encima de |, y los tres por encima de && y ||, así que a | b && c es (a | b) && c.

El boolean de Java no es un entero: if (flag == 1) no compila, y != entre dos booleanos es el o exclusivo mientras que == es el bicondicional. ~ se aplica solo a tipos enteros. No hay operador de implicación; !a || b es la traducción, y una cadena a -> b -> c hay que ponerla entre paréntesis a mano como !a || (!b || c).

Tangibool no exporta Java. El puente práctico es la tabla de verdad: expórtala como CSV, convierte cada fila en una prueba parametrizada, y deja que los pares de independencia del motor te digan qué filas necesita un conjunto de pruebas al estilo MC/DC. El analizador de aquí rechaza &, |, ^ y ~ en la entrada para que una fórmula copiada de Java no se lea en silencio con el operador equivocado.

El error habitual

Leer a & b como una errata de a && b. Entre booleanos es un AND válido sin cortocircuito; en una condición que protege una llamada a un método sobre un objeto posiblemente nulo, la diferencia es una excepción.

Preguntas

¿^ es XOR en Java?

Sí, tanto entre operandos boolean como enteros. El analizador de esta referencia rechaza igualmente ^, porque en otras herramientas es una potencia o un operador bit a bit, y ofrece XOR como corrección.

¿La precedencia coincide con esta referencia?

Para !, && y ||, sí. Los operadores sin cortocircuito se sitúan entre ellos con su propio orden, y == y != ligan con más fuerza que &, así que a & b == c es a & (b == c).

Relacionado

Véase también

Lenguajes

Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.