1
public class MyClass
{
    public static void main(String args[])
    {
        Boolean b=false;
        if(b=true)
        {
            System.out.println("TRUE");
        }
        if(b=false){
            System.out.println("FALSE");
        }
    }
}

ほとんどの人にとっては非常に単純な問題に思えるかもしれませんが、このコードを実行すると出力が TRUE になることを理解できません。

は代入演算子であるため、値が(有効) と(有効)=に割り当てられているため、どちらの場合も true になるはずです。これにはelse条件がないため、出力としてTRUEとFALSEの両方を与える必要があります。if(b=true) = trueif(b=false) = true

4

7 に答える 7

5

このような代入の戻り値は、常に右辺です。したがって、(b=false) の結果は false です。

ここのJava言語仕様で定義されていますhttp://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26

実行時の代入式の結果は、代入が行われた後の変数の値です。

于 2013-04-22T09:20:49.600 に答える
1
if(b=true)

truevalue が に設定さbれ、ブラケット内の値が置き換えられることを意味するbため、JVM はそれを次のように扱います。

if(true) //変数 b はその値に置き換えられます。

そのため、JVM から期待されるような出力が得られます。=代入演算子です。==ブール値を比較するには、演算子を使用する必要があります。

于 2013-04-22T09:28:46.200 に答える
0

if ステートメントの内側の部分は、その true である場合にのみ実行されます。つまり、if (true) 内側のステートメントが実行される if(false) 内側のステートメントは、2 番目の if ステートメントで実行されません。

于 2013-04-22T09:29:45.723 に答える
0
if(b=false)

is different than

if(b == false)

if(b==false) checks if b is false than enters the if section, BUT if(b=false) aqssigns false to ba and then does not enter to the if section because it is false.

于 2013-04-22T09:29:07.157 に答える
0

条件ステートメントはブール型に評価される必要があります。そのため、b に含まれる値は、条件ステートメントが評価されるときに自動的にアンボックス化され、プリミティブ型の boolean が機能するのと同じように機能します。したがって、if(b=true) が true であるため、値が返されます。変数 b に true の値を代入して if(true) として評価し、変数 b に false の値を代入して if(b=false) として評価し、false であるため終了します。

于 2013-04-22T09:58:48.100 に答える