Java如何处理用|分隔的参数?

6
Java如何处理由|分隔的参数?
例如:
private void foo(int i) {
    System.out.println(i);
}

private void bar() {
    foo(1 | 2 | 1);
}

这将产生输出结果

3

我曾在SWT/JFace小部件构造函数中看到过这个用法。我无法弄清楚i的值是如何确定的。


1
你知道 | 不是分隔符,它是按位或运算符。 - Goibniu
1
我在Java中实际上从未遇到过位运算符,这可能就是为什么我没有意识到它,现在它显得更加合理了。 - Ozsie
2个回答

8
| 是按位或操作符,常用于IT技术中。
foo(1 | 2 | 1);

意思是使用参数1按位或2按位或1调用foo。

  • 1的二进制表示为01
  • 2的二进制表示为10

0110按位或的结果为11,十进制表示为3。

请注意,|运算符也适用于布尔值。与||运算符的区别在于,即使第一个操作数的值为true,第二个操作数也会被计算。

实际上,所有按位运算符也适用于布尔值,包括异或运算符^。然而,在这里,没有相应的逻辑运算符。(这是多余的,因为没有办法对^进行“懒惰”评估:)


1
+1 表示“即使第一个操作数为真,第二个操作数也会被计算”,我之前不知道。 - f1sh

2
它使用了按位或运算符。首先,1 | 1 = 1,因此第二个1是多余的。如果我们去掉多余的1,就得到了等式1 | 2 = 3。在二进制中看起来像这样:01 | 10 = 11
或运算符将从每个值中匹配相应的位,如果在给定位置上有一个或两个值中的任何一个值为1,则结果为1。如果对于相应的位,两个值都为0,则结果为0。

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