Da das "Ergebnis" einer Zuweisung der Wert zugewiesen ist ... so ist es immer noch ein boolean
Ausdruck im zweiten Fall. if
Ausdrücke erfordern die Bedingung, um eine boolean
Ausdruck, der durch die zweite, aber nicht die erste erfüllt ist. Effektiv Ihre zwei Schnipsel sind:
int a;
a = 1;
if (a) { }
und
boolean b;
b = true;
if (b) { }
Ist es aus dieser Expansion deutlich, dass die zweite Version aber nicht die erste kompilieren?
Dies ist ein Grund, nicht direkt Vergleiche mit True und False zu machen. Also würde ich immer if (b)
anstelle von if (b == true)
und if (!b)
anstelle von if (b == false)
schreiben. Sie bekommen immer noch Probleme mit if (b == c
), wenn b
und c
sind boolean
Variablen, zugegebenermaßen - ein Tippfehler kann dort ein Problem verursachen. Ich kann nicht sagen, dass es mir jemals passiert ist.
EDIT: auf Ihre bearbeiten Reaktion - Zuweisungen aller Art können in if
Anweisungen verwendet werden - und while
Schleifen usw., solange der Gesamtzustand Ausdruck boolean
ist. Zum Beispiel könnten Sie haben:
String line;
while ((line = reader.readLine()) != null)
{
// Do something with a line
}
Während ich in der Regel vermeiden Nebenwirkungen bei Bedingungen, diese besondere Idiom für das Beispiel oft nützlich ist oben gezeigt, oder InputStream.read
verwenden. Im Grunde ist es "während der Wert, den ich lese, nützlich ist, benutze es."
Es ist keine schlechte Idee, die Gewohnheit zu bekommen, dass die Konstante zunächst setzen in Ihrer if-Anweisungen .... ist: wenn (true == b) {} und if (1 == a) { } Diese Gewohnheit garantiert, dass der Compiler Sie schlägt, wenn Sie = anstelle von == schreiben. –
@Ollie: Meinungen sind sehr unterschiedlich auf diesem. Was die Lesbarkeit betrifft, ist dies * eine schlechte Idee. Außerdem bietet es in Sprachen wie Java keinen Vorteil, da hier keine Verwirrung entstehen kann. Ich meine, niemand schreibt jemals einen Test als 'if (a == wahr)', oder? –
@Konrad. Du hast Recht in Java, aber für diesen C-Runderneuerten, der in PERL und einigen anderen Sprachen arbeitet, hat es mich viele Male gerettet. –