hm ok,
Ich bin grad am Java einsteigen und kenne das nur von C/C++, dass es da einen kleinen Performance Unterschied gibt. Nun hatten wir hier letztlich ne Diskussion (eher so Klugscheisserei, geb ich zu
), weil in C/C++ der Postfix operator ( cnt++) eben mit "const TypeObjectVonCnt operator++(int)" und der Praefix-Operator ( ++cnt) mit "TypeObjectVonCnt& operator++()" definiert ist.
Dabei dient das int (i.d.R. wird einfach 0 implizit zurueckgegeben, man selber bekommt davon nix mit) zur Unterscheidung, dieses wurde afaik wegen C Programmierern in den 80ern eingefuehrt, weil sie sonst keine Moeglichkeit hatten die beiden zu unterscheiden. Das etwas zurueckgegeben werden muss ist klar, da man ja ein Ergebnis haben will
Es ist jedoch deswegen ein const Obj notwendig, da sonst zB cnt++++ moeglich waere (cnt.operator++(0).operator++(0)). Das ist deshalb aber problematisch weil es erstens nicht konsistent ist mit anderen Operatoren (man will die Konsistenz weil man, in C++ zumindest, Operatoren ueberladen will und auch muss - in Java is das nicht noetig, dafuer gibts Methoden, hehehe) und zweitens weil das nicht unbedingt das tut, was man will. Da der erste Aufruf von operator++() sich noch direkt auf cnt bezieht, aber der zweite auf das was von operator++() zurueckgegeben wird, da kann einiges schiefgehn. Warum aber da ein Unterschied in den Returnwerten ist, weiss ich auch nicht genau, aber es ist in C und C++ so (weil es wahrscheinlich auch sinnvoll ist).
Tja zur Performance last sich nun folgendes sagen, wenn ein "const Obj" zurueckgegeben wird, muss dieses erzeugt und wieder zerstoert werden. So etwas nennt man "temporaeres Objekt" und das laeuft alles komplet im Hintergrund. Jedes Erzeugen von temporaeren Obj. allokiert Speicher (Kosten) und das Zerstoeren gibt ihn wieder frei (Kosten). Hinzu kommt, dass die Implementierung eines "temporaeren Obj's" auch kostet, weil sie ein zusaetzliches Objekt erzeugt (das "old value" Problem), das hat mit einer impliziten Typumwandlung (afaik hier von int nach const int) des temporaeren Objs, zu tun, wofuer eben der sog "old value" auch zerstoert werden muss (Kosten). Es ist also bei diesen Sprachen auch teurer - und das ist allgemein so ein Unterschied zwischen Postfix und Praefix - den Postfix-Operator zu benutzen, da obiges bei diesen unaeren Operatoren eben auch allg. gilt.
Wenn man das eben nun in for-loops oder dergleichen verwendet, wird es in jedem Schleifendurchlauf gemacht. Naja und glauben heisst schliesslich nicht wissen, sondern messen waere aufschlussreicher. Das hab ich aber auch noch nich gemacht, hehehe, ich dachte vielleicht kennt sich da jemand von Euch etwas aus, da ich auch schon oft gesehn habe, dass Java einen zu Konzepten zwingt, die man unbedingt in C++ machen sollte, aber man es auch komplett anders (vermurksen) machen kann. Daher waere es schon interessant zu wissen wie sie das bei Java geloest haben, dachte ich.