Java - 使用“|”的解释?

时间:2013-07-18 20:40:41

标签: java android

我是android和学习java的新手。在最近的指南中,我遇到了将密码字段切换到普通文本字段的方法。

有人可以在此声明中解释使用|吗?

final EditText input = (EditText) findViewById(R.id.etCommands);

if(passTog.isChecked())
{
   input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
   input.setInputType(InputType.TYPE_CLASS_TEXT);
}

对此有任何帮助将不胜感激。提前谢谢。

编辑:

我需要知道 按位OR 在这里是如何工作的?  这是完整的代码,以避免变量的含糊不清:

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.text);

    Button checkCommand = (Button)findViewById(R.id.bResults);
    final ToggleButton passTog = (ToggleButton) findViewById(R.id.tbPassword);
    final EditText input = (EditText) findViewById(R.id.etCommands);
    TextView display = (TextView) findViewById(R.id.tvResults);

    passTog.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            if(passTog.isChecked()){
                input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            }else {
                input.setInputType(InputType.TYPE_CLASS_TEXT);
            }

        }
    });

}

7 个答案:

答案 0 :(得分:9)

该代码未在|语句中使用if。它在if语句的正文中使用它是非常不同的。在那里使用时,它是bitwise-or操作。 编辑: @RohitJain在评论中提供了比我更好的链接:http://en.wikipedia.org/wiki/Bitwise_operation#OR


如果它在if语句中使用,如下所示:

if (foo() | bar())

表示“不要短路”。如果foo()返回“true”,它仍会评估bar()。如果您使用||foo()返回“true”,则不会评估bar(),因为它知道if语句的结果将为“true”,无论是什么别的发生了。


针对您的具体问题,您可以看到InputType here的可能值。

InputType.TYPE_CLASS_TEXT = Constant Value: 1 (0x00000001)
InputType.TYPE_TEXT_VARIATION_PASSWORD = Constant Value: 128 (0x00000080)

使用this tool,我计算了按位的结果,或者是:12。要了解如何获取该值,请阅读上面的维基百科文章。

答案 1 :(得分:1)

这是按位OR运算符 - 有关详细信息,请参阅this

答案 2 :(得分:1)

|  is a Bitwise inclusive OR
|| is a Conditional-OR

按位OR采用相等长度的两个位模式,并对每对相应位执行逻辑包含OR运算。如果第一位为1或第二位为1或两位均为1,则每个位置的结果为1;否则,结果为0.例如:

   0101 (decimal 5)
OR 0011 (decimal 3)
 = 0111 (decimal 7)

检查thisthis

答案 3 :(得分:1)

“|”符号定义为按位包含OR

来源:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

| (按位包含OR)运算符比较每个操作数的值(以二进制格式),并产生一个值,其位模式显示任一操作数中的哪些位的值为1.如果两个位均为0,则该位的结果是0;否则,结果是1。

来源:http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc05bitiore.htm

答案 4 :(得分:1)

您应该始终做的第一件事是查阅文档。

这是link to the documentation for InputType

这是页面上的第一件事

A password field with with the password visible to the user:

    inputType = TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

它实际上是页面上的第三句

答案 5 :(得分:0)

|表示按位OR

||意味着逻辑OR

答案 6 :(得分:0)

|对常量InputType.TYPE_CLASS_TEXTInputType.TYPE_TEXT_VARIATION_PASSWORD进行了定位。我假设这两个常量是用于识别EditText对象所关心的内部类型的int,给定格式,但它可以是任何变量类型。如果确实想知道正好它正在做什么,你需要知道InputType.TYPE_CLASS_TEXT的数据类型,但我们可以假设感谢Java代码的常见做法以后它会将常数粘在一起进行比较。