3

ブール変数ステータスがあるかどうかを考えてみましょう。status の値が false であると仮定します。

の違いは何か知りたいです

if ( status = true )
{
   //block of code
}

if ( status == true )
{
   //block of code
}

私はサンプルプログラムを書くことによってそれを理解しようとしました.最初のifブロックのコードは、ステータスの値が何であれ(trueまたはfalse)に対して実行されます.

他のプリミティブ型の場合、if で「=」を 1 つだけ使用すると、システムはコンパイル時エラーをスローし、ブール型の場合にエラーをスローしないのはなぜですか。ありがとう。

4

9 に答える 9

21

最初のものは比較ではなく、代入です。コンパイルする理由は、ブール値を割り当てるためです。したがって、割り当ての結果もブール値になります。

最初のステートメントは新しい値を割り当て、その新しい値に従ってstatus実行します(あなたの場合)。2 番目のステートメントは、 の現在の値を右側の値と比較し、比較の結果に基づいて動作します。iftruestatus

booleanJava またはboolC# でtrueorと比較することは決して良い考えではないことに注意してください。 の代わりにandfalseを使用できます。ただし、これは C# のnull 許容型には当てはまらないため、orと比較することをお勧めします。if (status)if (status == true)if (!status)if (status == false)bool?truefalse

于 2013-01-11T12:08:49.500 に答える
10

if ( status = true )最初に に代入trueするため、 は常に true になりますstatus。一方、if ( status == true )それstatusは真であるだけです。

それを書き、タイプミスや混乱を避けるための最良の方法は次のとおりです。

if (status) { }
于 2013-01-11T12:09:31.010 に答える
4

最初のコードパートで、割り当てており、ステータスの値をチェックしていません! このエラーを回避するには、次のように記述します。

if (status)
if (!status)

(これはブール値に対してのみ機能します)

また

if ( true == status )

if ( "Peter" == name )

この var と string/value の位置の交換は、すべての変数タイプで機能します。一部のコーダーは、これを使用して===のタイプミスを回避します。

あなたが誤って書いた場合

if ( status = true )

それ以外の

if ( status == true )

これは機能しませんが、コンパイラ エラーは発生しません (var を true に設定するだけです)。

でも書き慣れてるなら

if ( true == status )

タイプミスをしていて、コンパイラがエラーを出す等号の 1 つを見逃しています。

または、等号を使用できます。

if (name.equals("Peter"))
于 2013-01-11T12:13:31.787 に答える
3

if(status = true) ステータスを に設定するとtruetrue... これifは常に になりますtrue

if(status == true)実際には小切手です。これはあなたが使いたいものです

于 2013-01-11T12:09:02.440 に答える
2

Javaif ( status = true )では比較ではなく代入です。

于 2013-01-11T12:09:14.007 に答える
2

最初のケースは比較していません。status変数を割り当てているだけです。そして、新しいstatus値が返されます。この場合はtrueです。

見る:

= 演算子 は結果としてオペランド値を返します。

== 演算子 は、オペランドの値が等しい場合に true を返すか、参照型の場合に 2 つのオペランドが同じオブジェクトを参照している場合に true を返します。

于 2013-01-11T12:10:25.470 に答える
2

2 つの演算子の違いを強調するために、yoda 条件を少し試してみることができます。

Yoda の条件は、定数値を最初のオペランドとして使用する場合で、コードが から に変換されif ( status = true )ますif ( true = status )。定数 true には何も代入できないため、コンパイラは構文エラーを返します (コンパイルの成功を妨げます)。Yoda 条件を使用すると、コンパイラは警告ではなく構文エラーを表示します。

私は、yoda 条件はアンマネージ コードと古いコンパイラに由来し、.NET 言語ではあまり役立たないと考えていますが、違いを学ぶための楽しい方法になる可能性があります。

于 2013-01-11T12:27:36.387 に答える
1

1つ目は割り当て用で、status = trueで、2つ目は比較ステータス==true用です。

于 2013-01-11T12:14:25.287 に答える