Zunächst einige Hintergrundinformationen: Ich bin ein ausgebildeter IT-Lehrer und versuche, die Booleschen Operatoren von Java in meine Klasse der 10. Klasse einzuführen. Mein Lehrer-Mentor sah sich ein Arbeitsblatt an, das ich vorbereitet und kommentiert hatte, dass ich sie nur ein einziges & oder | verwenden lassen könnte die Operatoren zu bezeichnen, weil sie "dasselbe tun".
Mir ist der Unterschied zwischen & und && bewusst.
& ist ein bitweiser Operator, der für die Verwendung zwischen ganzen Zahlen vorgesehen ist, um "Bit-Twiddling" durchzuführen.
&& ist ein Bedingungsoperator, der für die Verwendung zwischen Booleschen Werten vorgesehen ist.
Um zu beweisen, dass diese Operatoren nicht immer "dasselbe tun", habe ich ein Beispiel gesucht, bei dem die Verwendung der bitweisen Werte zwischen Booleschen Werten zu einem Fehler führen würde. Ich habe dieses Beispiel gefunden
boolean bitwise;
boolean conditional;
int i=10, j=12;
bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
i=10;
bitwise = (i>j) & (i=3) > 5; // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i>j) && (i=3) > 5; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
Dieses Beispiel zeigt, dass, wenn ein Wert in der zweiten Hälfte des Ausdrucks geändert werden muss, dies zu einem Unterschied zwischen den Ergebnissen führen würde, da bitweise ein eifriger Operator ist, während sich die Bedingung wie ein Kurzschluss verhält (die zweite nicht auswertet) half, wenn die erste Hälfte im Fall von && falsch ist, und true im Fall von ||).
Ich habe ein Problem mit diesem Beispiel. Warum möchten Sie einen Wert gleichzeitig mit einem Vergleich ändern? Es scheint keine robuste Art des Codierens zu sein. Ich war immer abgeneigt, in meinem Produktionscode mehrere Operationen in einer einzigen Zeile auszuführen. Es scheint etwas zu sein, was ein "Coding Cowboy" ohne Gewissen in Bezug auf die Wartbarkeit seines Codes tun würde. Ich weiß, dass Code in einigen Domänen so kompakt wie möglich sein muss, aber dies ist sicherlich eine schlechte Praxis im Allgemeinen.
Ich kann meine Entscheidung, die Verwendung von && und || zu fördern, erläutern über & und | denn dies ist eine anerkannte Kodierungskonvention in der Softwareentwicklung .
Aber könnte mir jemand bitte ein besseres, sogar reales Beispiel für die Verwendung eines bitweisen Operators in einem bedingten Ausdruck geben?