231 votes

Pourquoi utilisons-nous habituellement ' || ' pas ' |', quelle est la différence ?

Je me demande pourquoi nous employons habituellement logique ou entre deux valeurs booléennes ou pas binaire , bien qu’ils tous les deux fonctionnent bien.

Je veux dire, regardez ce qui suit :

Nous pouvons utiliser au lieu de ? Même chose avec et .

363voto

Shawn Points 3077

Si vous utilisez l' || et && formes, plutôt que de l' | et & formes de ces opérateurs, Java ne sera pas la peine d'évaluer la droite opérande seul.

C'est une question de si vous voulez tout court-circuit ou non l'évaluation -- la plupart du temps vous le souhaitez.

Une bonne façon d'illustrer les avantages de court-circuit serait à considérer l'exemple suivant.

Boolean b = true;
if(b || foo.timeConsumingCall())
{
   //we entered without calling timeConsumingCall()
}

Un autre avantage, comme Jeremy et Peter l'a mentionné, de court-circuit est la référence null vérifier:

if(string != null && string.isEmpty())
{
    //we check for string being null before calling isEmpty()
}

plus d'infos

86voto

Michael Myers Points 82361

fait pas de court-circuit évaluation dans les expressions booléennes.s’arrête à évaluer si le premier opérande est true, mais `` ne.

En outre, peut être utilisé pour exécuter l’opération de bits OR sur les valeurs d’octet/court/int/long. ne peut pas.

63voto

Paul Bellora Points 26524

Il suffit donc du pour construire sur les autres réponses avec un exemple, un court-circuit est crucial dans la défensive suivante vérifie :

À l’aide de et au lieu de cela pourrait entraîner un `` jetés ici.

41voto

user667648 Points 5919

Logique et vérifier du côté droit uniquement si nécessaire. Les et vérifier les deux tout le temps.

Par exemple :

Le réécrire :

Un autre exemple :

Le réécrire :

15voto

fluffy Points 1915

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X