Or

triade

Aktives Mitglied
Hallo, kann mir wer sagen wie man oder in java eingibbt ich weiß das es das zeichen || sein soll wird mir allerdings als fehler angezeigt und das egal wie ich es da schreibe. Hat jemand einen Plan?
 

httpdigest

Top Contributor
Dann ist es nicht das, was du da eingeben solltest und es wäre ein Syntaxfehler an dieser Stelle.
Schreib doch einfach mal, warum du glaubst, dass du da ein Oder eingeben sollst, wie der Quellcode aussieht und wo du da ein Oder einfügen willst und was genau die Fehlermeldung ist.

Du hast initial nur gefragt, wie man den logischen Oder-Operator in Java eingibt. Das hast du bekommen. Jetzt sagst du, dass da wohl irgendwo ein Fehler angezeigt wird. Darauf kann hier ohne weitere Infos niemand mehr antworten.
 

Neumi5694

Top Contributor
"ein Fehler" hat immer "eine Lösung".
So lange du nicht sagst, worin dieser Fehler besteht und zumindest die eine Zeile deines Quellcodes postest (edit: bitte ein paar mehr, Kontext ist immer hilfreich, zumindest die Variablendeklarationen wären sinnvoll), können wir nur raten.

Und poste bitte in code-tags, die findest du links oben vom Eingabefenster.
 

mihe7

Top Contributor
Du musst Alt Gr + zweimal | drücken, um das logische Or einzugeben. Das andre is nen bitweiser Operator.
Das ist nicht ganz richtig. Sind die beiden Operanden boolesche Ausdrücke, dann liefert der bitweise |-Operator ein boolean, so dass er effektiv zum logischen OR-Operator wird. In Bezug auf die Logik besteht der Unterschied zwischen | und || lediglich darin, dass || den rechten Teil nur auswertet, wenn der linke Teil false liefert. Aussagenlogisch liefern also beide das gleiche Ergebnis, nur durch die unterschiedliche Auswertung kann es passieren, dass | zu Exceptions führt, während || korrekt durchläuft:
Java:
boolean nullOrEmpty;
nullOrEmpty = list == null | list.isEmpty(); // führt zu einer NullPointerException, falls list == null
nullOrEmpty = list == null || list.isEmpty(); // ist ok
 

KonradN

Super-Moderator
Mitarbeiter
Wobei der Fehler leicht erklärbar ist: der zieht sich massiv durch die Dokumentation …

Nehmen wir nur Wikipedia:

Boolsche Operatoren und Operatoren zur Manipulation von Bits … klare Trennung …

Die JLS ist aber natürlich ganz deutlich und wenn man nur 15.22.1 und 15.23 bzw. 15.24 sehen würde, dann würde man es auch so finden, aber da ist ja noch 15.22.2 :)

15.22.1 beschreibt die Operatoren für Ganzzahlen und was dazu konvertiert werden kann und 15.22.2 beschreibt es für Boolean/boolean Werte.

Conditional And (15.23) und Conditional Or (15.24) sind dann nur für Boolean und ganz interessant: die gibt es nicht kombiniert mit der Zuweisung also kein &&= oder so.
 

mihe7

Top Contributor
aber da ist ja noch 15.22.2 :)
Genau, und selbst in der JLS steht "then the type of the bitwise operator expression is boolean", während in der Überschrift | als logischer Operator genannt wird. Das ergibt auch Sinn, da nur 1 Bit für ein boolean benötigt wird und es bei einer bidrektionalen Abbildung von "0" auf false und true auf "1" Jacke wie Hose ist, ob man nun ein bitweises or logisches OR hat: das Ergebnis ist faktisch das gleiche.

Praktisch verwende ich aber grundsätzlich nur || für logische Ausdrücke; den für die Ausführung durchaus relevanten Unterschied übersieht man bei einem | im Quelltext doch leicht und wenn ich den zweiten Ausdruck in jedem Fall ausgewertet haben möchte, dann setze ich den Code eben explizit vor das if-Statement, so dass es zu keinen Verwirrungen kommen kann:
Java:
boolean expr1 = ersterAusdruck();
boolean expr2 = zweiterAusdruck();
if (expr1 || expr2) {
    ...
}
statt
Java:
if (ersterAusdruck() | zweiterAusdruck()) {
    ...
}
(Die Ausdrücke sind hier aus syntaktischen Gründen als Methoden dargestellt)

Das ist zwar mehr Code, der dafür aber weniger Raum für Fehler lässt.
 

Neumi5694

Top Contributor
Benötigt wird nur ein Bit, aber zumindest in ein paar anderen Sprachen oder auch einigen Datenbanken werden immer alle auf 0 oder 1 gesetzt. Wie ist das in Java?
 

KonradN

Super-Moderator
Mitarbeiter
Benötigt wird nur ein Bit, aber zumindest in ein paar anderen Sprachen oder auch einigen Datenbanken werden immer alle auf 0 oder 1 gesetzt. Wie ist das in Java?

Da kann man in die Java Virtual Machine Specification schauen:
The Java Virtual Machine encodes boolean array components using 1 to represent true and 0 to represent false. Where Java programming language boolean values are mapped by compilers to values of Java Virtual Machine type int, the compilers must use the same encoding.

Und auch:
In Oracle's Java Virtual Machine implementation, arrays of type boolean (atype is T_BOOLEAN) are stored as arrays of 8-bit values and are manipulated using the baload and bastore instructions (§baload, §bastore) which also access arrays of type byte. Other implementations may implement packed boolean arrays; the baload and bastore instructions must still be used to access those arrays.

Auch wenn es hier vor allem um das Speichern in Arrays geht, würde ich das so verstehen, dass da explizit 0 und 1 abgelegt werden. Aber ich muss gestehen, dass ich zwar in die JVMS rein geschaut habe, aber das war für mich bisher nie wirklich interessant. Da haben evtl. Andere hier noch deutlich mehr Ahnung von.
 

mihe7

Top Contributor
Benötigt wird nur ein Bit, aber zumindest in ein paar anderen Sprachen oder auch einigen Datenbanken werden immer alle auf 0 oder 1 gesetzt.
Da hatte ich mich etwas ungünstig ausgedrückt, weil es mir nur um die logische Sicht ging: ich kann mir ein boolean als ein Bit vorstellen usw.

So lange ich nur booleans betrachte, ist da aber auch kein Unterschied, denn für die Abbildung auf einen numerischen Datentyp kann ich z. B. definieren, dass false -> 0 und true -> ~0. Auch dann stimmt die bitweise Sicht noch, z. B. false | true -> 00000000 | 11111111 -> 11111111 -> true.

Erst, wenn ich mixe, gibt es Unterschiede, weil die Sprachen bei der Konvertierung zu boolean meist(?) ein true liefern, wenn der zu konvertierende Wert ungleich 0 ist.
 

Neue Themen


Oben