Java if/else & oder && verwenden

Chris2130

Well-known member
ID: 308573
L
13 Januar 2008
527
24
Hallo,
ich habe weniger eine Frage zu der Programmiersprache selbst, eher zum Stil:
Benutzt man & oder &&, weil es geht irgentwie beides und ich hab sonst in anderen Sprachen auch immer && genommen, habe aber kürzlich gehört, dass ich nicht && sondern & benutzen sollte, ist da was dran?
 
& und && sind zwei völlig verschiedene paar Stiefel (die nur zufällig (fast) dasselbe tun).

&& ist der logische Operator, den du immer benutzen solltest.
& ist der binäre Operator, den du nur für binäre Rechenoperationen nutzt.

Diese Operatoren richtig zu benutzen hat weitere Vorteile, da die binäre Rechenoperation immer vollständig ausgeführt wird
PHP:
System.out.println(1 & 5 & 0 & 4 & 4); // 0
Bei der logischen Auswertung, bricht die Ausführung aber beim ersten false ab, weil false logisch-verundet nie mehr true werden kann.
PHP:
if(true && true && false && true && true) {
    foo();
}
Ein weiterer Unterschied ist die Operatorreihenfolge:
Die binären Operatoren haben höhere Priorität als die logischen, sodass
PHP:
if(4 && 4 & 4 && 4) foo();
eigentlich
PHP:
if(4 && (4 & 4) && 4) foo();
ist.

Diese Ausführungen müssten für alle "C-Sprachen" (Java, C/C++, PHP, ...) gelten, ohne dass jetzt alles im einzelnen nachgeprüft zu haben.

Schon alleine des sauberen Stils wegen benutze &&, || nur für logische Vergleiche und &, |, ^ für binäre Rechnungen und niemals andersrum.
 
Es ist nicht das selbe welchen Operator du benutzt.
& ist ein Bit Operator und && ein Logischer Operator.
Hab gerade keine Referenz für Java bei Hand, aber hier kannst du es für PHP nachlesen. Dürfte keinen Unterschied machen. Ich denke du willst im IF eher einen Logischen Operator verwenden. Daher ein &&.

Bit Operator
Logischer Operator

*Edit TH war schneller und ausführlicher. ;)
 
Ich häng noch n Nachtrag zu
Diese Operatoren richtig zu benutzen hat weitere Vorteile, da die binäre Rechenoperation immer vollständig ausgeführt wird
an. Mein Beispiel war nicht gut gewählt.

Folgender C-Code läuft durch
PHP:
int foo() {
  return 0;
}

int a = 4;
if(a == 42 && (5 / foo() == 1))
  bar();
, da a != 42 und somit die zweite Bedingung nicht geprüft wird.
PHP:
int foo() {
  return 0;
}

int a = 4;
if(a == 42 & (5 / foo() == 1))
  bar();
bringt das Betriebssystem dazu, das Programm abzuschießen, da eine Division durch Null entsteht, während der Bedingungsausdruck zu
PHP:
if(0 & (5 / 0 == 1))
vereinfacht worden is.