Java XOR运算符问题

4
我有一些关于Java中异或运算符^的问题。
我一直认为Java没有逻辑异或运算符,因为一些人告诉我^是按位运算。 但今天我发现一些(未经证实的)帖子(没有来源),称^在Java中被重载,可以作为布尔值的逻辑异或运算符,也可以作为整数的按位异或运算符。
哪个陈述是正确的?有人能提供一些可靠的来源吗?
如果^被重载,它接受哪些类型?
2个回答

7

Java语言规范定义了:

当操作符 &^ 或者 | 的两个操作数均可以转换为基本整型类型时(§5.1.8),首先对操作数执行二进制数字提升(§5.6.2)。

位运算符表达式的类型是操作数的晋升类型。

  • 对于 ^,结果值是操作数值的按位异或。

当一个 &、^ 或 | 运算符的两个操作数都是 boolean 或 Boolean 类型时,位运算符表达式的类型为 boolean。在所有情况下,必要时操作数都要进行自动拆箱转换(§5.1.8)。对于 ^,如果操作数值不同,则结果值为 true;否则,结果为 false。Java 中没有运算符重载的概念。

3
我认为把操作符称为“overloaded”作为一个概念是可以的。但是,当然你不能像在C++或其他一些语言中那样自己重载操作符。 - ajb
2
在我看来,如果一个术语不是该语言的术语,我会避免在谈论该语言时使用它。在Java中有两个“^”运算符,一个是位运算符,一个是逻辑运算符。 - Sotirios Delimanolis

0

你应该将^看作是按位异或。

布尔值应该被看作是单个位,其中false=0,true=1。

第二句话与你的问题有关,也与像程序员思考有关!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接