观察:

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


当前回答

因为布尔数据类型像整数一样存储,所以如果使用布尔值,位操作符^的功能就像异或操作一样。

//©Mfpl - XOR_Test.java

    public class XOR_Test {
        public static void main (String args[]) {
            boolean a,b;

            a=false; b=false;
            System.out.println("a=false; b=false;  ->  " + (a^b));

            a=false; b=true;
            System.out.println("a=false; b=true;  ->  " + (a^b));

            a=true;  b=false;
            System.out.println("a=true;  b=false;  ->  " + (a^b));

            a=true; b=true;
            System.out.println("a=true; b=true;  ->  " + (a^b));

            /*  output of this program:
                    a=false; b=false;  ->  false
                    a=false; b=true;  ->  true
                    a=true;  b=false;  ->  true
                    a=true; b=true;  ->  false
            */
        }
    }

其他回答

你的要求没多大意义。除非我说错了,否则你是在暗示你想用异或来执行逻辑运算,就像AND和OR一样。你提供的代码实际上显示了我指的是什么:

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

您的函数有布尔输入,当对布尔使用按位XOR时,结果与您提供的代码相同。换句话说,在比较单个位(布尔值)或比较较大值中的单个位时,按位XOR已经很有效了。把它放在上下文中,就二进制值而言,任何非零值都是TRUE,只有0是false。

因此,要像应用逻辑与一样应用XOR,您要么只使用带有一个比特的二进制值(给出相同的结果和效率),要么必须将二进制值作为一个整体而不是每个比特来计算。换句话说,表达式(010 ^^ 110)= FALSE而不是(010 ^^ 110)= 100。这将从操作中移除大部分语义含义,并表示您无论如何都不应该使用的逻辑测试。

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

错了。

Java

两个逻辑与运算符:正常AND为&,短路AND为&&,和 两个逻辑或运算符:正常或为|,短路或为||。

XOR仅作为^存在,因为短路计算是不可能的。

Java中唯一的操作符重载是字符串上的+ (JLS 15.18.1 String concatation operator +)。

社区多年来一直被分成三部分,三分之一不想要它,三分之一想要它,三分之一不在乎。

你可以使用unicode来创建方法名。如果你想用一个符号,你可以用myVal = x.$(y);其中$是符号,x不是原语…但这在某些编辑器中是很危险的,并且是有限制的,因为你不能在原语中这样做。

不是x != y吗?

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