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

Ozs*_*sie 6 java methods arguments

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

例如

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

private void bar() {
    foo(1 | 2 | 1);
}
Run Code Online (Sandbox Code Playgroud)

哪个会给出输出

3
Run Code Online (Sandbox Code Playgroud)

我已经看到这在SWT/JFace小部件构造函数中使用.我无法弄清楚的是如何i决定价值.

aio*_*obe 8

|是一个按位或运算符.

foo(1 | 2 | 1);
Run Code Online (Sandbox Code Playgroud)

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

  • 1 二进制是 01
  • 2 二进制是 10

按位或的01并且1011它是在十进制3.

请注意,|运算符也可用于布尔值.与||运算符的不同之处在于即使第一个操作数求值,也会计算第二个操作数true.

实际上,所有按位运算符也适用于布尔运算,包括xor ^.但是,这里没有相应的逻辑运算符.(这将是多余的,因为没有办法做一个"懒惰"评估^:)