Leistung: größer / kleiner als vs nicht gleich
Frage ich mich, ob es einen Unterschied in der Leistung zwischen
überprüfen, ob ein Wert größer /kleiner als der andere
for(int x = 0; x < y; x++); //for y > x
und
überprüfen, ob ein Wert nicht gleich einem anderen
for(int x = 0; x != y; x++); //for y > x
... und warum?
Außerdem: Was ist, wenn ich Vergleiche auf null, gibt es einen weiteren Unterschied?
Wäre es schön, wenn die Antworten auch überlegen, eine assebled Blick auf den code.
EDIT:
Wie die meisten von Ihnen darauf hingewiesen, der Unterschied in der Leistung ist natürlich unwesentlich, aber mich interessiert der Unterschied auf der cpu-Ebene. Die Bedienung ist komplexer?
Mir ist es eher eine Frage zum lernen /verstehen der Technik.
Entfernte ich die Java
tag, die ich versehentlich Hinzugefügt, weil die Frage war, bedeutete in der Regel nicht nur auf Java-Basis, sorry.
- Vielleicht relevant: en.wikibooks.org/wiki/Microprocessor_Design/ALU_Flags
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie noch tun, was ist klarer, sicherer und einfacher zu verstehen. Diese micro-tuning-Diskussionen sind in der Regel eine Verschwendung von Zeit, weil
Hinweis: die Maschine erzeugt wird, kann auch der Wechsel mit Prozessor oder JVM, so sah dies nicht sehr hilfreich ist in den meisten Fällen, auch wenn Sie sehr vertraut mit Assembler-code.
Was ist viel, viel wichtiger ist die Wartbarkeit der software.
Die Leistung ist absolut vernachlässigbar. Hier finden Sie den code, um es zu beweisen:
Die Ergebnisse:
Test One: 113 Test Two: 113
auf meinem laptop.java.util.Date
. Obwohl die javadoc sagt, dass "Diese Methode liefert Nanosekunden-Präzision, aber nicht unbedingt Nanosekunden-Auflösung (das heißt, wie Häufig ändert sich der Wert) - keine Garantien gemacht werden, außer, dass die Auflösung mindestens so gut wie die der currentTimeMillis()." So würde ich nicht unbedingt Vertrauen in die Genauigkeit der zusätzliche Präzision.Date().getTime()
- Sie erstellen ein neues Objekt, nur um die Zeit zu Messen, die möglicherweise tatsächlich verdecken die benchmark. Warum nichtnanoTime()
oder zumindestcurrentTimeMillis()
(das ist eine der am schnellsten fordert, btw)?Gibt es selten einen Leistungseinbruch, aber der erste ist viel zuverlässiger als es behandelt sowohl von den außergewöhnlichen Fällen, in denen
!=
als<
(alle Iteratoren, zum Beispiel, im Gegensatz zu random-access-Iteratoren), so!=
ist in der Regel verwendet für die Konsistenz.Anderen Menschen zu haben scheinen, beantwortet von einem gemessenen Perspektive, sondern aus der Maschine, die Sie interessiert in der Arithmetik-Logik-Einheit (ALU), die Griffe der mathy bits auf einem "normalen Rechner". Es scheint eine ziemlich gute Details in Wie funktioniert weniger als und größer als die Arbeit auf einer logischen Ebene in Binär? für komplette details.
Aus rein logischer Ebene, die kurze Antwort ist, dass es einfacher zu sagen, wenn etwas ist nicht etwas, als es zu sagen, wenn etwas ist relativ zu etwas, aber das hat wahrscheinlich optimiert in Ihrem standard-personal-computer oder server, und Sie sehen nur die tatsächlichen Gewinne wahrscheinlich in kleinen persönlichen builds wie on-board-Computer für Drohnen oder andere Mikro-Technologien.
Frage mich, ob verschachtelten für jeden test werden die gleichen Ergebnisse ?