【问题标题】:What does the pipe character do in a Java method call?管道字符在 Java 方法调用中的作用是什么?
【发布时间】:2013-05-08 14:14:57
【问题描述】:

我已经看到在 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

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

【问题讨论】:

标签: java methods syntax


【解决方案1】:

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

【讨论】:

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

这是一个按位或。

数字的按位表示是这样的:

|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。

【讨论】:

    【解决方案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 */
    }
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 2019-08-15
      • 2019-01-25
      • 1970-01-01
      • 2013-09-17
      • 2013-03-10
      相关资源
      最近更新 更多