2

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

//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;

有人可以解释一下&=and是什么|=意思吗?

我的理解是,如果可接受为真,那么还要检查右侧并将操作的值(假/真)分配给可接受,这样如果它是假的,则不需要检查右侧。

4

5 回答 5

9

就像

a += b;

方法

a = a+b;

, 你有

a &= b;

意义

a = a&b;

当然对于|=.

大多数语言中的其他运算符具有相同的构造,其语法继承自 C 语言。看看这个例子:Linux内核源代码中的“>>=”是什么意思?

另请参阅java 中赋值运算符的完整列表

于 2012-08-31T08:15:27.410 回答
3

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

于 2012-08-31T08:18:55.993 回答
1

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

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

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

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

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
于 2012-08-31T08:37:17.043 回答
0

由于 & 不是捷径运算符,它可能不如使用 && 高效。如果你这样做,它可能看起来像这样。

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();
于 2012-08-31T08:33:38.587 回答
0

语法x &= y等价于x = x & y

语法x |= y等价于x = x | y

于 2012-08-31T08:34:25.993 回答