Pourquoi nous avons l'habitude d'utiliser `||` non `|`, quelle est la différence?

Je me demandais simplement pourquoi nous utilisons habituellement la logique OU || entre deux booléens pas au niveau du bit OU |, bien qu'ils travaillent tous les deux bien.

Je veux dire, regardez les suivantes:

if(true  | true)  //pass
if(true  | false) //pass
if(false | true)  //pass
if(false | false) //no pass
if(true  || true)  //pass
if(true  || false) //pass
if(false || true)  //pass
if(false || false) //no pass

Peut-on utiliser | au lieu de ||? Même chose avec & et &&.

  • La plupart des gens oublient que | est un non-court-circuit de l'opérateur booléen en plus d'être un opérateur au niveau du bit.
  • Les détails sur la différence dans le JLS. Voir java.sun.com/docs/books/jls/third_edition/html/...
  • Ils ne sont pas les mêmes. S'il vous plaît consulter les tutoriels sur eux, surtout concernant court-circuit d'évaluation vs désireux d'évaluation. || et && court-circuit alors que les | et & sont impatients.
  • Juste par curiosité, dans ce cas, vous voulez vraiment utiliser le non court-circuité versions? J'ai presque toujours voir && et ||, mais jamais & |. Si vous êtes en train de faire quelque chose qui dépend d'effets secondaires, je ne vois pas pourquoi vous devriez utiliser quelque chose comme (a & b | c) puisque quelqu'un pourrait facilement penser "je peux optimiser en utilisant la court-circuité versions."
  • C'est la différence entre (bit à bit) Boolean vs "logique" (c'est à dire, avoir à faire avec les mathématiques "logique"). C'est un peu accessoire (mais très important) que les opérateurs logiques sont "court-circuit".
  • Et, bien sûr, ils ont différents priorité.
  • Mise à jour JLS lien: docs.oracle.com/javase/specs/jls/se11/html/...

InformationsquelleAutor Eng.Fouad | 2011-08-18