Java如何处理由|分隔的参数?
例如
private void foo(int i) {
System.out.println(i);
}
private void bar() {
foo(1 | 2 | 1);
}
哪个会给出输出
3
我已经在SWT / JFace小部件构造函数中看到过这种情况。我无法弄清楚i
的价值是如何确定的。
答案 0 :(得分:8)
|
是按位或运算符。
foo(1 | 2 | 1);
表示使用参数1按位或2位或1 调用foo。
1
为01
2
为10
按位或01
和10
为11
,小数点为3。
请注意,|
运算符也可用于布尔值。与||
运算符的区别在于,即使第一个操作数的计算结果为true
,也会计算第二个操作数。
实际上,所有位运算符也适用于布尔值,包括xor ^
。但是,这里没有相应的逻辑运算符。 (这将是多余的,因为无法对^
进行“懒惰”评估:)
答案 1 :(得分:2)
正在使用bitwise OR operator。首先,1 | 1 = 1
所以第二个1是多余的。如果我们删除冗余1,我们将使用等式1 | 2 = 3
。用2位二进制看它看起来像:
01 | 10 = 11
或运算符将匹配每个或每个值的相应位,如果给定位置的任一值或两个值中都有1,则结果为1.如果两个值都对应于相应位,则结果为是0。