Java方法调用中的管道字符有什么作用?

18

我看到过Java程序中在方法调用中使用管道字符。

例如:

I've seen the pipe character used in method calls in Java programs.

For example:

public class Testing1 {

    public int print(int i1, int i2){
        return i1 + i2; 
    }
    public static void main(String[] args){
        Testing1 t1 = new Testing1();
        int t3 = t1.print(4, 3 | 2);
        System.out.println(t3);
    }
}

当我运行它时,我只会得到7

请问有人能解释一下方法调用中的管道符号是什么意思,以及如何正确使用吗?


请查看以下链接:https://dev59.com/xlrUa4cB1Zd3GeqPmro1 - Srinivas
3个回答

22

3 | 2 中的管道符号是按位或运算符,在您的情况下返回3(二进制中11 | 10 == 11)。


6
不,它执行按位或运算,保留任一操作数中设置为1的所有位。例如,2 | 1 => 10 | 01 => 11 => 3 - 另一个例子:6 | 5 => 110 | 101 => 111 => 7等等... - assylias
1
你能解释一下这个有用的方式吗? - CodyBugstein
1
例如,要传递多个选项:int option1 = 1, option2 = 2, option3 = 4, option4 = 8(因此在二进制中为:1、10、100、1000)。然后,您可以执行类似以下的操作:method(option1|option2|option3),以表示您希望使用所有这些选项。在方法中,您可以执行argument & 1来查看是否选择了option1。现在,虽然它不是每天都会使用的东西,但在某些特定情况下它可能很有用。 - assylias
1
@Imray 二进制掩码(通过位运算)是一种非常常用的技术,用于在整数等中设置/取消某些字段。在电子工程中经常看到 :) 如果这听起来很新,请尝试谷歌位运算。 - Morten Jensen
虽然这篇文章回答了OP的问题,但是加上关于布尔参数中|||的信息会更好。这样我们就可以将这个问题作为更多重复问题的目标。 - Pshemo

7

这是一个按位或运算。

数字的按位表示如下:

|2^2|2^1|2^0|
| 4 | 2 | 1 |
  • 3的按位表示为:
|2^2|2^1|2^0|
| 4 | 2 | 1 |
| - | X | X |  => 3
  • 2的按位表示为:
|2^2|2^1|2^0|
| 4 | 2 | 1 |
| - | X | - | => 2

按位或将返回3,因为使用OR时必须“占用”至少一位。由于第一和第二位被占用(3 | 2),因此将返回3。

最后,加法4 + 3 = 7。


5
< p > | 操作符对操作数执行按位或操作:

3 | 2 --->    0011 (3 in binary)
           OR 0010 (2 in binary)
          ---------
              0011 (3 in binary)

以下是模式:

0 OR 0: 0
0 OR 1: 1
1 OR 0: 1
1 OR 1: 1

使用 |
if(someCondition | anotherCondition)
{
    /* this will execute as long as at least one
       condition is true */
}

请注意,这类似于在if语句中常用的短路或(||)操作: 短路求值
if(someCondition || anotherCondition)
{
    /* this will also execute as long as at least one
       condition is true */
}

(除了 || 不强制需要继续检查其他条件之外,一旦发现真实表达式,便停止检查。)

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