割り当ての「結果」は割り当てられた値であるためboolean
、2番目のケースでも式です。if
式では、条件が式boolean
である必要があります。これは、2 番目の式では満たされますが、最初の式では満たされません。事実上、2 つのスニペットは次のとおりです。
int a;
a = 1;
if (a) { }
と
boolean b;
b = true;
if (b) { }
その展開から、2 番目のバージョンはコンパイルされますが、最初のバージョンはコンパイルされないことは明らかですか?
これは、true と false を直接比較しない理由の 1 つです。したがって、私は常にif (b)
代わりにif (b == true)
andif (!b)
の代わりに書くだけですif (b == false)
。if (b == c
確かに、 ) whenb
およびc
areboolean
変数で問題が発生します。タイプミスが問題を引き起こす可能性があります。私はそれが私に起こったことがあるとは言えません。
編集: 編集への応答 - すべての種類の割り当てをif
ステートメントで使用できます - およびwhile
ループなど、全体的な条件式がboolean
. たとえば、次のような場合があります。
String line;
while ((line = reader.readLine()) != null)
{
// Do something with a line
}
私は通常、条件の副作用を避けますが、この特定のイディオムは、上記の例やInputStream.read
. 基本的には、「読んだ値が役に立つ間はそれを使用してください」です。