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 が何を|=意味するのか説明してもらえますか?

私はそれを理解しています.acceptableがtrueの場合は右側もチェックし、操作の値(false/true)をacceptableに割り当てます。したがって、falseの場合は右側をチェックする必要はありません。

4

5 に答える 5

9

と同じように

a += b;

意味

a = a+b;

、 あなたが持っている

a &= b;

意味

a = a&b;

もちろん、 についても同じです|=

構文が C 言語から継承されるほとんどの言語では、他の演算子に対して同じ構造があります。たとえば、これを見てください: What does ">>=" mean in Linux kernel source code?

java の代入演算子の完全なリストも参照してください。

于 2012-08-31T08:15:27.410 に答える
3

+=-=*=/=、およびその他のそのような演算子は&=|=ほとんどの言語で単純に略記されa = a + b、同等です。

于 2012-08-31T08:18:55.993 に答える
1

'&' and '|' are bitwise operators. When used with '=' operator, these are just shortcuts for saying:

a&=b the same as a=a&b

Now, what does the a&b returns? It returns the logical 'AND', so it compares bits. As for boolean values (which are just named constants in Java), they represent 0 and 1 bit (for 'false' and 'true', respectively)

But you can use them with other integer types as well (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 に答える