3

言語はJavaです。これを考えると:

public static void main(String[] args) {
    Boolean b1 = true;
    Boolean b2 = true;
    int i1 = 1;

    if (b1 = true) //line 5
    if (b1 == true}  // line 6

b1 == trueこれは同等のテストであり、true または false という結果が得られることを理解しています。ただし、 with b1 = true、私の理解では、これは宣言であり、この場合は何も返さないはずです: b1 = truetrue を返します。test とまったく同じ==ですか?

理由を説明できますか?ありがとう!

4

3 に答える 3

15

if (identifier = literal)次のように評価されます。

identifier = literal;  
if (identifier)

まず、リテラルを識別子に割り当てます。次に、割り当て後にテストします

于 2012-09-13T04:01:31.250 に答える
1

あなたが書くとき

b1 = true;

trueb1 に割り当てられます。

あなたが書くとき

if(b1 = true)

最初に割り当てが行われ、次に式が評価され、式がb1ieの値に評価されますtrue

于 2012-09-13T04:48:07.903 に答える
1

どちらも true を返す理由は、単純に両方の式が true だからです。

b1 = true は割り当てです --> b1 が true であることを Java に伝え、評価すると true になります。

b1 == true は条件です --> [value of] b1 が true に等しいかどうかをチェックしており、b1 が true であるかどうかに応じて true または false に評価されるため、これは意味のある行です。b1 はすでにブール値 (true または false) であるため、単に b1 と記述できることに注意してください。

あなたは気付いていないと思いますが、プリミティブ型のブール値ではなく、オブジェクト型のブール値を使用しています。オブジェクトベースの型と Java のプリミティブ型の違いがよくわからない場合は、小文字の b を使用することをお勧めします。

ところで、Java が代入を式として使用できることを知りませんでした。

于 2013-10-13T05:14:25.373 に答える