Du
kannst es allerdings auch mit "&" machen:
if(0<=pos.getY() & internalshipTyp <= I)
Bei einfachen "&&/&" ist es egal, bei "||/|" ist es dann wichtiger:
Java:
if(true && true) //true
if(false && true) //false
if(true && false) //false
if(false && false) //false
Du siehst also (hoffe ich mal), dass beide Bedingungen ausgewertet werden müssen, um bei "&&" zu einem Ergebniss zu kommen.
Anderst als bei ||. Das steht quasi für "und/oder", bedeutet also, dass
mindestens eine Bedingung wahr sein muss:
Java:
if(true || true) //true
if(false || true) //true
if(true || false) //true
if(false || false) //false
Wenn du || oder && schreibst, dann bricht er z. B. in der 1 und 3. if des ||-Blocks ab.
Schließlich weiß er durch die trues schon, dass die Bedingung komplett true ist, da ja nur min. 1 davon wahr sein muss. Bei dem 2. und 4. weiß er noch nicht ob es true oder false ist, und wertet dementsprechend beide aus.
Wenn du nur | oder & verwendest, dann wertet er
immer beide aus. In dem meisten Fällen bedeutet dass aber mehr bzw. unnötige Arbeit für die VM. Ich denke das gibt es dafür, falls eine booleanische Funktion ausgewertet ist, diese aber mehr macht als nur zu prüfen und dementsprechend true oder false zurückzugeben. In diesen Fall muss man wohl "|" oder "&" verwenden, um sicherzustellen, dass die Methode auch wirklich abgearbeitet wird.
Ach ja, und die Klammern in woody's Funktion sind unnötig, da die booleschen Operatoren die kleinste mathematische Priorität von allen mathe-zeug haben, dass ich kenne: Klammer, Wurzel/Quadrat, Multiplizieren/Dividieren, Addieren/Subtrahieren usw.
Braucht man erst bei vielen verschachtelten Abfragen/Vergleichen.
Ich hoffe das hast du jetzt verstanden.