Crear un operador "lógico exclusivo o" en Java
Observaciones:
Java tiene un operador AND lógico.
Java tiene un operador lógico OR.
Java tiene un operador NOT lógico.
Problema:
Java no tiene un operador XOR lógico, según sun . Me gustaría definir uno.
Definición del método:
Como método se define simplemente de la siguiente manera:
public static boolean logicalXOR(boolean x, boolean y) {
return ( ( x || y ) && ! ( x && y ) );
}
Llamada al método:
Este método se llama de la siguiente manera:
boolean myVal = logicalXOR(x, y);
Uso del operador:
Preferiría tener un operador, usado de la siguiente manera:
boolean myVal = x ^^ y;
Pregunta:
No puedo encontrar nada sobre cómo definir un nuevo operador en Java. ¿Donde debería empezar?
Java tiene un operador XOR lógico , es ^ (como en a ^ b
).
Aparte de eso, no puedes definir nuevos operadores en Java.
Editar: aquí hay un ejemplo:
public static void main(String[] args) {
boolean[] all = { false, true };
for (boolean a : all) {
for (boolean b: all) {
boolean c = a ^ b;
System.out.println(a + " ^ " + b + " = " + c);
}
}
}
Producción:
falso ^ falso = falso falso ^ verdadero = verdadero verdadero ^ falso = verdadero verdadero ^ verdadero = falso
¿No es x! = y?
Java tiene un operador AND lógico.
Java tiene un operador lógico OR.
Equivocado.
Java tiene
- dos operadores AND lógicos: AND normal es & y cortocircuito AND es &&, y
- dos operadores lógicos OR: OR normal es | y el cortocircuito OR es ||.
XOR sólo existe como ^, porque no es posible la evaluación de cortocircuito.
Quizás no entendiste la diferencia entre &
y &&
y
El propósito de los operadores de acceso directo |
y es que el valor del primer operando puede determinar el resultado y , por lo tanto, no es necesario evaluar el segundo operando.||
&&
||
Esto es especialmente útil si el segundo operando daría como resultado un error. p.ej
if (set == null || set.isEmpty())
// or
if (list != null && list.size() > 0)
Sin embargo, con XOR , siempre hay que evaluar el segundo operando para obtener el resultado, de modo que la única operación significativa sea ^
.
puedes simplemente escribir(a!=b)
Esto funcionaría de la misma manera que a ^ b
.