Presque tous les points de comparaison sont très bien couverts dans toutes les réponses. Je veux juste ajouter un exemple. Pour montrer comment le résultat change en fonction de l'opérateur utilisé. Considérons l'exemple ci-dessous
int a = 10;
if(++a==10 & ++a==12) {
++a;
}
System.out.println(a); //12
Dans le code ci-dessus, nous utilisons l'opérateur bitwise &. Il évaluera donc les deux arguments (gauche et droite) sans tenir compte du résultat individuel.
donc a
sera incrémenté 2 fois dans if condition
. Mais comme la condition ne deviendra pas vraie, elle n'entrera pas dans la boucle if et le 3ème incrément ne se produira pas. La valeur finale de a sera donc de 12 dans ce cas.
Supposons maintenant, dans le même exemple ci-dessus, que nous utilisions l'opérateur && en court-circuit. alors après avoir évalué ++a==10
à false, il ne va pas aller vérifier le second argument. Et donc la valeur finale d'un prétendu 11.
int a = 10;
if(++a==10 && ++a==12) {
++a;
}
System.out.println(a); //11
Sur cette base, nous pouvons dire que la performance de l'opérateur & au sens des bits est relativement faible par rapport à l'opérateur && en court-circuit. En effet, l'opérateur bitwise évaluera les deux arguments, quel que soit le résultat du premier argument. Alors que l'opérateur && arrêtera d'évaluer le second argument si le résultat du premier argument est faux.
Une autre différence entre les deux est que l'opérateur Bitwise & est applicable aux types booléens et intégraux. Alors que l'opérateur && en court-circuit n'est applicable que pour le type booléen.
On peut écrire
System.out.println(4 & 5); // 4
Mais si nous essayons d'écrire comme ,
System.out.println(4 && 5);
Ensuite, il y aura une erreur disant,
Mauvais types d'opérandes pour l'opérateur binaire "&&".