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

Java如何处理由|分隔的参数?,java,methods,arguments,Java,Methods,Arguments,Java如何处理由|分隔的参数 比如说 private void foo(int i) { System.out.println(i); } private void bar() { foo(1 | 2 | 1); } 这将产生输出 3 我已经在SWT/JFace小部件构造函数中看到了这一点。我搞不懂的是I的值是如何决定的。|是一个按位or运算符 foo(1 | 2 | 1); 表示使用参数1位或2位或1调用foo 二进制的1是01 二进制的2是10 01和10的按位

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

比如说

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

private void bar() {
    foo(1 | 2 | 1);
}
这将产生输出

3

我已经在SWT/JFace小部件构造函数中看到了这一点。我搞不懂的是
I
的值是如何决定的。

|
是一个按位or运算符

foo(1 | 2 | 1);
表示使用参数1位或2位或1调用foo

  • 二进制的
    1
    01
  • 二进制的
    2
    10
01
10
的按位or为
11
,十进制为3

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

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

它正在使用。对于初学者来说,
1 | 1=1
,因此第二个1是多余的。如果我们去掉多余的1,剩下的等式是
1 | 2=3
。在2位二进制文件中,它看起来像:

01 | 10=11


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

您知道|不是分隔符,而是按位OR运算符。我在Java中从未遇到过按位运算符,这可能就是我没有意识到这一点的原因,现在更有意义了。+1表示“即使第一个操作数的计算结果为true,也会计算第二个操作数”,我不知道。