观察:

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中定义新操作符的内容。我该从哪里开始呢?


当前回答

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

其他回答

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

这是一个var arg XOR方法的java…

public static boolean XOR(boolean... args) {
  boolean r = false;
  for (boolean b : args) {
    r = r ^ b;
  }
  return r;
}

享受

也许你误解了&和&&,|和||之间的区别 快捷操作符&&和||的目的是第一个操作数的值可以确定结果,因此不需要计算第二个操作数。

如果第二个操作数将导致错误,这尤其有用。 如。

if (set == null || set.isEmpty())
// or
if (list != null && list.size() > 0)

然而,对于XOR,你总是必须计算第二个操作数才能得到结果,所以唯一有意义的操作是^。

这是因为操作符重载是他们故意在语言中遗漏的东西。他们用字符串连接“欺骗”了一点,但除此之外,这样的功能并不存在。

(免责声明:我没有接触过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