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ógica | Java | Nota |
|---|---|---|
NOT A | !a | ~ es solo para enteros |
A AND B | a && b o a & b | & evalúa los dos lados |
A OR B | a || b o a | b | | evalúa los dos lados |
A XOR B | a ^ b o a != b | Los dos son lógicos sobre boolean |
A -> B | !a || b | No hay operador de implicación |
A <-> B | a == b | Igualdad de dos valores boolean |
TRUE, FALSE | true, false | No 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
- Operadores lógicos en C: lógicos frente a bit a bit
- Operadores lógicos en JavaScript: &&, ||, !, truthiness y precedencia
- & y | simples son operaciones bit a bit en la mayoría de lenguajes
- ^ significa XOR en C, Java y Python, no AND ni potencia
- != entre booleanos es XOR
- Pares de independencia MC/DC, ejemplo resuelto con el informe de cobertura del motor
- Derivar casos de prueba de una tabla de verdad sin probar todas las filas
Lenguajes
- Símbolos y notaciones de la lógica booleana: NOT, AND, OR en palabras, código y matemáticas
- Operadores booleanos en Python: and, or, not, precedencia y errores comunes
- Operadores lógicos en JavaScript: &&, ||, !, truthiness y precedencia
- Lógica booleana en SQL: AND, OR, NOT y la trampa de NULL (lógica trivaluada)
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.