Je me demande s’il existe une différence de performance entre
vérifier si une valeur est supérieure/inférieure à une autre
for(int x = 0; x < y; x++); // for y > x
et
vérifier si une valeur n'est pas égale à une autre
for(int x = 0; x != y; x++); // for y > x
et pourquoi?
De plus: si je compare à zéro, y a-t-il une autre différence?
Ce serait bien si les réponses envisageaient également une vue globale du code.
EDIT: Comme la plupart d'entre vous l'ont souligné, la différence de performances est bien sûr négligeable, mais je m'intéresse à la différence au niveau du processeur. Quelle opération est plus complexe?
Pour moi, c’est plus une question d’apprendre/comprendre la technique.
J'ai supprimé la balise Java
, que j'ai ajoutée par inadvertance, car la question ne visait généralement pas uniquement Java, désolé.
Vous devez toujours faire ce qui est plus clair, plus sûr et plus facile à comprendre. Ces discussions de micro-réglage sont généralement une perte de temps, car
Remarque: la machine générée peut également changer avec le processeur ou la machine virtuelle Java. Il n'est donc pas très utile de chercher dans cette affaire, même si vous connaissez très bien le code d'assemblage.
Ce qui est beaucoup, beaucoup plus important, est la maintenabilité du logiciel.
La performance est absolument négligeable . Voici un code pour le prouver:
public class OpporatorPerformance {
static long y = 300000000L;
public static void main(String[] args) {
System.out.println("Test One: " + testOne());
System.out.println("Test Two: " + testTwo());
System.out.println("Test One: " + testOne());
System.out.println("Test Two: " + testTwo());
System.out.println("Test One: " + testOne());
System.out.println("Test Two: " + testTwo());
System.out.println("Test One: " + testOne());
System.out.println("Test Two: " + testTwo());
}
public static long testOne() {
Date newDate = new Date();
int z = 0;
for(int x = 0; x < y; x++){ // for y > x
z = x;
}
return new Date().getTime() - newDate.getTime();
}
public static long testTwo() {
Date newDate = new Date();
int z = 0;
for(int x = 0; x != y; x++){ // for y > x
z = x;
}
return new Date().getTime() - newDate.getTime();
}
}
Les resultats:
Test One: 342
Test Two: 332
Test One: 340
Test Two: 340
Test One: 415
Test Two: 325
Test One: 393
Test Two: 329
Il y a rarement un impact sur les performances, mais le premier est beaucoup plus fiable car il gérera les deux cas extraordinaires où
D'autres personnes semblent avoir répondu d'un point de vue mesuré, mais du point de vue de la machine, l'unité de logique arithmétique (ALU), qui gère les bits de calcul sur un "ordinateur normal", vous intéresserait. Il semble y avoir un assez bon détail dans Comment fonctionne moins que et plus que fonctionner à un niveau logique en binaire? pour plus de détails.
Du point de vue purement logique, la réponse courte est qu’il est plus facile de dire si quelque chose n’est pas quelque chose que de dire si quelque chose est relatif à quelque chose, bien que cela ait probablement été optimisé dans votre ordinateur personnel ou serveur standard. Vous ne verrez que des gains réels dans de petites constructions personnelles, telles que des ordinateurs de bord pour drones ou d'autres micro-technologies.