观察:

Java有一个逻辑与运算符。 Java有一个逻辑或运算符。 Java有一个逻辑NOT运算符。

问题:

sun表示,Java没有逻辑XOR运算符。我想定义一个。

方法定义:

作为一种方法,简单定义如下:

public static boolean logicalXOR(boolean x, boolean y) {
    return ( ( x || y ) && ! ( x && y ) );
}

方法调用:

这个方法的调用方式如下:

boolean myVal = logicalXOR(x, y);

操作符用法:

我更希望有一个操作符,使用如下:

boolean myVal = x ^^ y;

问题:

我找不到任何关于如何在Java中定义新操作符的内容。我该从哪里开始呢?


当前回答

你需要切换到Scala来实现你自己的操作符

管的例子

其他回答

我使用的是非常流行的类"org。apache。commons。lang。booleanutils "

这种方法经过许多用户的测试,是安全的。玩得开心。 用法:

boolean result =BooleanUtils.xor(new boolean[]{true,false});

可以实现使用流API在java 8及以上

public static boolean logicalXOR(boolean x, boolean y) {  // can modify to take [] or list of bools
    return Stream.of(x, y)  // modify as per method params
        .filter(bool -> bool)
        .count() == 1;
}

这里有一个例子:

给定2个int值,如果一个为负,一个为正,则返回true。除非参数"negative"为真,否则只有当两个参数都为负时才返回真。

    public boolean posNeg(int a, int b, boolean negative) {
      if(!negative){
        return (a>0 && b<0)^(b>0 && a<0);
      }
      else return (a<0 && b<0);
    }

你可以使用Xtend(中缀操作符和操作符重载)来重载操作符并“停留”在Java上

Java确实有一个逻辑异或运算符,它是^(在a ^ b中)。

除此之外,您不能在Java中定义新的操作符。

编辑:下面是一个例子:

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);
        }
    }
}

输出:

false ^ false = false
false ^ true = true
true ^ false = true
true ^ true = false