16

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

例如:

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.

有人可以解释管道在方法调用中的作用以及如何正确使用它吗?

4

3 回答 3

21

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

于 2013-05-08T14:16:28.510 回答
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

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

最后,加法 4 + 3 = 7。

于 2013-05-08T14:28:48.117 回答
3

运算符对|操作数执行按位或:

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 */
}

请注意,这类似于语句中常用的短路OR ( ):||if

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

(除了||不强制在找到真表达式后继续检查其他条件的需要。)

于 2014-02-02T21:13:02.157 回答