7
votes

Qu'est-ce qui vaut mieux utiliser en Java? x <= 10 ou x <11?

Y a-t-il une différence sur l'efficacité du programme entre x <= 10 et x <11 ? Y a-t-il d'autres différences?

merci


7 commentaires

j'en doute. Nous allons entrer dans des différences de secondes probablement des secondes


Les deux sont identiques en termes d'efficacité.


Pas assez de différence pour s'inquiéter, choisissez celui qui montre le plus clairement ce que vous vérifiez. par exemple. Pour une boucle de collection, préférez x sur x <= longueur-1 .


Quels sont les résultats de vos tests des deux options? Si les efforts de tester les deux dépassent votre intérêt dans la matière et que votre question suggère que cela ne vaut donc pas la peine de vous déranger avec une différence de performance possible. Choisissez quelle que soit la meilleure expression exprime vos idées et accumulez des questions de programmation plus intéressantes.


S'il y avait une différence (il n'y a pas), vous pouvez compter sur le compilateur pour remplacer X <= 10 par X <11 pour vous où il ne modifie pas le programme.


C'est un exemple clair d'optimisation qui a mal tourné.


Quelqu'un descendit chaque réponse sauf le premier ... bizarre ...


8 Réponses :


3
votes

Aucune différence pour le programme, je pense que c'est un goût plus personnel.


0 commentaires

2
votes

Il ne devrait y avoir aucune différence du tout. Même nombre de chèques est effectué


0 commentaires

6
votes

Référez-vous http://fr.wikipedia.org/wiki/java_bytecode_instrucance_listings Par exemple, pour x <= 10 , if_icmple instruction sera utilisé et pour x <11 , if_icmplt instruction sera utilisé. Les deux devraient avoir la même efficacité.


2 commentaires

Bonne référence, mais les codes d'octets utilisés dépendront du compilateur (peut être if_icmpgt et if_icmpge).


Bytecode n'est pas pertinent en référence à la performance. C'est le code évoqué qui compte, et cela pourrait être n'importe quoi.



1
votes

Les deux sont identiques en termes d'efficacité, son choix personnel .
Si vous vérifiez l'octet code de la classe générée des deux a la même complexité c'est-à-dire pour les cas comme le (supposons que la vérification présente dans une boucle de boucle) a été exécuté le même nombre de fois, donc ils ont la même complexité, donc il n'effectue pas dans la complexité d'un programme .


1 commentaires

Je n'ai pas le code octet en ce moment. Vous pouvez vous référer en.wikipedia.org/wiki/java_bytecode_instrucance_listings . Et merci d'avoir montré d'intérêt sur le code d'octets :-)



3
votes

Il n'y a pas de différence pour xxx

mais pour le double, il y a une différence énorme: xxx


0 commentaires

2
votes

Cela dépend de ce que vous faites. Par exemple, voir ci-dessous.

la boucle où i <= 10 exécute 101 temps tandis que i exécute 111 fois. xxx

sortie: xxx


1 commentaires

Je soupçonne que le Downvoter supposumé OP parlait d'entiers et je cherche simplement des différences de performance (non des différences fonctionnelles) (comme la plupart d'entre nous l'ont fait) (mais cela n'a pas été explicitement déclaré cependant).



1
votes

Cela dépend du type de x. En cas d'entier, il n'y aura aucune différence. Si c'est un float ou un double , il existe une différence définie entre les deux.


0 commentaires

1
votes

J'ai testé un peu, voici le code:

 public static void main(String[] args) throws InterruptedException, IOException {

    boolean b;
    Date d = new Date();
    for (long i = 0; i < 10000000001L; i++) {
        b = i < 1000001L;
    }
    System.out.println("< " + ((new Date()).getTime() - d.getTime()) + " ms");
    d = new Date();
    for (long i = 0; i <= 10000000000L; i++) {
        b = i <= 1000000L;
    }
    System.out.println("<= " + ((new Date()).getTime() - d.getTime()) + " ms");
}


0 commentaires