Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&;=和|=在Java中_Java_Operators - Fatal编程技术网

&;=和|=在Java中

&;=和|=在Java中,java,operators,Java,Operators,在项目中,我看到以下代码: //f is a File boolean acceptable = true; acceptable &= sweepFilename != null; acceptable &= f.getName().equals(sweepFilename.toString()); // parsable acceptable &= id == null || id.equals(sweepFilename.getId()); acceptable &

在项目中,我看到以下代码:

//f is a File
boolean acceptable = true;
acceptable &= sweepFilename != null;
acceptable &= f.getName().equals(sweepFilename.toString()); // parsable
acceptable &= id == null || id.equals(sweepFilename.getId());
acceptable &= length == null || length.equals(sweepFilename.getLength());
acceptable &= f.getName().toLowerCase().endsWith(SweepFilename.EXTENSION);
acceptable |= f.isDirectory();
return acceptable;
有人能给我解释一下
&=
|=
的意思吗

我的理解是,如果acceptable为true,那么还需要检查右侧,并将操作值(false/true)分配给acceptable,这样,如果acceptable为false,那么就不需要检查右侧。

就像

a += b;
意味着

,你有

a &= b;
意义

a = a&b;
当然,
|=
也是如此

对于语法继承自C语言的大多数语言中的其他运算符,都有相同的构造。看看这个例子:


另请参见。

+=
-=
*=
&
&=
和其他此类运算符在大多数语言中都只是
a=b
和等效运算符的简写。

由于&不是一个快捷运算符,它可能不如使用&>有效。如果你这样做了,它可能看起来像这样

return (sweepFilename != null 
        && f.getName().equals(sweepFilename.toString())
        && (id == null || id.equals(sweepFilename.getId()))
        && (length == null || length.equals(sweepFilename.getLength()))
        && (f.getName().toLowerCase().endsWith(SweepFilename.EXTENSION))) 
        ||  f.isDirectory();

语法
x&=y
相当于
x=x&y


语法
x |=y
相当于
x=x | y

“&”和“|”是位运算符。当与“=”运算符一起使用时,这些只是表示以下内容的快捷方式:

a&=b与a=a&b相同

现在,a&b的回报是什么?它返回逻辑“AND”,因此比较位。 至于布尔值(在Java中只是命名常量),它们分别表示0和1位(分别表示'false'和'true'

但您也可以将它们与其他整数类型(short、int、long)一起使用


x&=y=
x=x&y
&
依次是按位And运算符。
return (sweepFilename != null 
        && f.getName().equals(sweepFilename.toString())
        && (id == null || id.equals(sweepFilename.getId()))
        && (length == null || length.equals(sweepFilename.getLength()))
        && (f.getName().toLowerCase().endsWith(SweepFilename.EXTENSION))) 
        ||  f.isDirectory();
boolean a = true;
boolean b = false;
a &= b; // it acts like && and || for boolean values
System.out.println(a); //false

int i = 2;
int j = 3;        
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(j));

System.out.println(i&=j); // prints binary '10' == 2 decimal
System.out.println(i|=j); // prints binary '11' == 3 decimal