Si vous étudiez un peu Java, vous obtiendrez quelque chose appelé "évaluation des courts-circuits". c'est&&Ou||Dans un opérateur logique tel que, lorsque le côté gauche est évalué, la valeur booléenne de l'expression entière est déterminée et s'il n'est pas nécessaire d'évaluer le côté droit, le côté droit n'est pas évalué. Consultez l'exemple suivant.
boolean flag1 = false;
boolean flag2 = false;
if(flag1 && flag2){
System.out.println("Les deux variables sont vraies.");
}
Dans ce programme, flag1 et flag2 doivent tous deux être vrais pour que la branche conditionnelle sur la troisième ligne s'exécute à l'intérieur du bloc entre crochets du milieu. Cette fois, flag1 est faux, vous pouvez donc voir que vous n'avez pas à entrer dans le bloc de parenthèses du milieu sans avoir à vérifier la valeur booléenne de flag2. Dans une telle situation, l'évaluation de court-circuit est une fonction qui empêche l'évaluation de flag2 d'être effectuée automatiquement.
Java a deux opérateurs similaires, && et &. Les deux opérateurs ont presque les mêmes fonctionnalités, mais avec quelques différences. Comme mentionné précédemment, l'opérateur && fonctionne comme une fonction d'évaluation de court-circuit. Cependant, l'évaluation des courts-circuits ne fonctionne pas pour &. Autrement dit, & évalue la valeur du côté droit même dans des situations où il n'est pas nécessaire d'évaluer la valeur du côté droit.
Les livres de référence et les sites Web Java disent que && est plus rapide car il ne fait pas d'évaluation supplémentaire. Quand j'ai lu cette description, je me demandais. "Puisqu'il s'agit d'un processus différent, est-il vraiment plus rapide de simplement passer le processus du bon côté?" J'ai donc essayé de vérifier la différence de vitesse de traitement entre && et &.
Test1
long start = System.currentTimeMillis();
boolean flag1 = false;
boolean flag2 = false;
for(long i=0; i<10000000000l; i++) {
if(flag1 && flag2) {
System.out.print("");
}
}
long end = System.currentTimeMillis();
System.out.println("Temps d'exécution" + (end - start) + "ms");
&& est utilisé dans l'expression conditionnelle de l'instruction if.
Test2
long start = System.currentTimeMillis();
boolean flag1 = false;
boolean flag2 = false;
for(long i=0; i<10000000000l; i++) {
if(flag1 & flag2) {
System.out.println("");
}
}
long end = System.currentTimeMillis();
System.out.println("Temps d'exécution" + (end - start) + "ms");
& Est utilisé dans l'expression conditionnelle pour if.
J'ai en fait exécuté les deux types de programmes ci-dessus et pris des statistiques sur le temps d'exécution de chaque programme. Le tableau ci-dessous montre les résultats.
Avec évaluation des courts-circuits(&&) | Aucune évaluation de court-circuit(&) | |
---|---|---|
1ère fois | 3546 | 3500 |
Deuxième fois | 3556 | 3595 |
3e fois | 3586 | 3565 |
4ème fois | 3574 | 3564 |
5ème fois | 3552 | 3636 |
6ème fois | 3570 | 3620 |
7ème fois | 3512 | 3568 |
8ème fois | 3563 | 3597 |
9ème fois | 3560 | 3565 |
10e fois | 3555 | 3500 |
moyenne | 3557.6 | 3571.0 |
En ce qui concerne la moyenne du tableau, on considère que la vitesse de traitement est plus rapide lorsque l'évaluation de court-circuit est effectuée. Cependant, dans cette expérience, le nombre d'échantillons était petit et la différence de temps d'exécution entre avec et sans évaluation de court-circuit était faible, le traitement est donc plus rapide en utilisant && avec évaluation de court-circuit que & sans évaluation de court-circuit. Les motifs sont un peu faibles pour conclure.
Dans l'expérience que j'ai menée cette fois, j'ai obtenu le résultat que le traitement est plus rapide lors de l'utilisation de l'évaluation des courts-circuits. Pour le moment, il est préférable d'utiliser && en prenant le produit logique de plusieurs valeurs booléennes en Java. En outre, dans d'autres langues telles que C, & peut avoir une fonction complètement différente de prendre les deux côtés comme des nombres binaires et de prendre le produit logique pour chaque chiffre, de sorte que des erreurs peuvent survenir lors du changement de langue. Il est recommandé d'utiliser && si vous pouvez obtenir le même résultat en utilisant & et && en Java pour éviter qu'il n'augmente.
Recommended Posts