ele*_*n81 265 java operators xor
Java有一个逻辑AND运算符.
Java有一个逻辑OR运算符.
Java有一个逻辑NOT运算符.
据sun称,Java没有逻辑XOR运算符.我想定义一个.
作为一种方法,它只是定义如下:
public static boolean logicalXOR(boolean x, boolean y) {
return ( ( x || y ) && ! ( x && y ) );
}
Run Code Online (Sandbox Code Playgroud)
以下列方式调用此方法:
boolean myVal = logicalXOR(x, y);
Run Code Online (Sandbox Code Playgroud)
我宁愿有一个运算符,使用如下:
boolean myVal = x ^^ y;
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于如何在Java中定义新运算符的内容.我应该从哪里开始?
jav*_*ook 674
Java 确实有一个逻辑XOR运算符,它是^(如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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
false ^ false = false false ^ true = true true ^ false = true true ^ true = false
Mau*_*rry 299
不是x!= y?
sta*_*lue 73
Java有一个逻辑AND运算符.
Java有一个逻辑OR运算符.
错误.
Java有
XOR仅作为^存在,因为不可能进行短路评估.
Pet*_*rey 31
也许您误解了&
和之间的差异&&
,|
以及||
快捷运算符的用途,&&
并且||
第一个操作数的值可以确定结果,因此不需要计算第二个操作数.
如果第二个操作数会导致错误,这尤其有用.例如
if (set == null || set.isEmpty())
// or
if (list != null && list.size() > 0)
Run Code Online (Sandbox Code Playgroud)
但是使用XOR,您始终必须评估第二个操作数以获得结果,因此唯一有意义的操作是^
.
这是因为运算符重载是他们特意故意忽略的语言.他们使用字符串连接"欺骗"了一些,但除此之外,这种功能并不存在.
(免责声明:我没有使用java的最后两个主要版本,所以如果它现在,我会非常惊讶)
Java中唯一的运算符重载是字符串上的+(JLS 15.18.1字符串连接运算符+).
社区已经分为3年,1/3不想要它,1/3想要它,1/3不关心.
您可以使用unicode创建符号的方法名称...因此,如果您有一个想要使用的符号,则可以执行myVal = x.$(y); 其中$是符号而x不是原始的...但是在某些编辑器中这将是狡猾的并且是限制性的,因为你不能在原语上做.
以下代码:
public static boolean logicalXOR(boolean x, boolean y) {
return ( ( x || y ) && ! ( x && y ) );
}
Run Code Online (Sandbox Code Playgroud)
是多余的.
为什么不写:
public static boolean logicalXOR(boolean x, boolean y) {
return x != y;
}
Run Code Online (Sandbox Code Playgroud)
?
另外,正如javashlook 所说,已有^
运营商.
!=
并且^
对于布尔操作数(您的情况)工作相同*,但对于整数操作数不同.
*注意:
1.它们boolean
(原始类型)的工作方式相同,但不是Boolean
(对象类型)操作数.作为Boolean
(对象类型)值可以有值null
.并且!=
将返回false
或true
当它的一个或两个操作数都是null
,而^
将抛出NullPointerException
这种情况.
2.虽然它们的工作方式相同,但它们具有不同的优先级,例如当用于&
:a & b != c & d
将被视为a & (b != c) & d
,而a & b ^ c & d
将被视为(a & b) ^ (c & d)
(offtopic:ouch,C风格的优先级表很糟糕).
小智 6
这是java的var arg XOR方法...
public static boolean XOR(boolean... args) {
boolean r = false;
for (boolean b : args) {
r = r ^ b;
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
请享用