En plus de court-circuit, d'une autre chose à garder à l'esprit est que de faire une opération logique bit à bit sur les valeurs, qui peut être autre que 0 ou 1 a une signification très différente de celle de la logique conditionnelle. Alors qu'il est GÉNÉRALEMENT le même pour |
et ||
, &
et &&
vous obtenir des résultats très différents (par exemple, 2 & 4
0/false, alors qu' 2 && 4
1/vrai).
Si la chose que vous obtenez à partir d'une fonction est en fait un code d'erreur et vous faites des tests pour les non-0-ness, ce peut importe beaucoup.
Ce n'est pas un problème en Java où vous devez explicitement transtypage de booléens ou de comparer avec 0 ou similaire, mais dans d'autres langues avec la même syntaxe (C/C++ et al), il peut être assez déroutant.
Notez aussi que & et | peut s'appliquer uniquement de type entier des valeurs, et tout ce qui peut être équivalent à une valeur de type boolean test. Encore une fois, dans la non-Java langues, il y a un certain nombre de choses qui peut être utilisé comme un booléen avec un implicite != 0
de la comparaison (pointeurs, des flotteurs, des objets en avec une operator bool()
, etc.) et les opérateurs sur les bits sont presque toujours absurde dans ces contextes.