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

时间:2010-07-08 10:43:57

标签: java methods arguments

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

例如

private void foo(int i) {
    System.out.println(i);
}

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

哪个会给出输出

3

我已经在SWT / JFace小部件构造函数中看到过这种情况。我无法弄清楚i的价值是如何确定的。

2 个答案:

答案 0 :(得分:8)

|是按位或运算符。

foo(1 | 2 | 1);

表示使用参数1按位或2位或1 调用foo。

    二进制文件中的
  • 101
  • 二进制文件中的
  • 210

按位或011011,小数点为3。

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

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

答案 1 :(得分:2)

正在使用bitwise OR operator。首先,1 | 1 = 1所以第二个1是多余的。如果我们删除冗余1,我们将使用等式1 | 2 = 3。用2位二进制看它看起来像:

01 | 10 = 11

或运算符将匹配每个或每个值的相应位,如果给定位置的任一值或两个值中都有1,则结果为1.如果两个值都对应于相应位,则结果为是0。