Getting confused with == and = in "if" statement
compiler-errors, java, scjp
Solution
Because the "result" of an assignment is the value assigned... so it's still a `boolean` expression in the second case. `if` expressions require the condition to be a `boolean` expression, which is satisfied by the second but not the first. Effectively, your two snippets are:
int a;
a = 1;
if (a) { }
and
boolean b;
b = true;
if (b) { }
Is it clear from that expansion that the second version will compile but not the first?
This is one reason not to do comparisons with true and false directly. So I would always just write `if (b)` instead of `if (b == true)` and `if (!b)` instead of `if (b == false)`. You still get into problems with `if (b == c`) when `b` and `c` are `boolean` variables, admittedly - a typo there can cause an issue. I can't say it's ever happened to me though.
EDIT: Responding to your edit - assignments of all kinds can be used in `if` statements - and `while` loops etc, so long as the overall condition expression is `boolean`. For example, you might have:
String line;
while ((line = reader.readLine()) != null)
{
// Do something with a line
}
While I usually avoid side-effects in conditions, this particular idiom is often useful for the example shown above, or using `InputStream.read`. Basically it's "while the value I read is useful, use it."
Problem
I know that we cant use assignment operator in if statements in java as we use in any other few languages. that is ``` int a; if(a = 1) { } ``` will give a compilation error. but the following code works fine, how? ``` boolean b; if(b = true) { } ``` EDIT : Is this the exception to rule that assignment cant be used in if statement.