[Java lista] for: ++i vagy i++?
biziclop
biziclop at gmail.com
2009. Feb. 6., P, 12:09:08 CET
2009/2/6 Richard Oliver Legendi <roante at freemail.hu>:
> Sziasztok!
>
> Észrevettem egy fura dolgot a for kapcsán. C++-ből még rémlett, hogy
> 'hatékonyabb' for esetén a ++i használata, mint az i++ (kemény 2
> opcode-dal :-) ), és reflexből ezt használtam már X éve Javaban is. Nem
> biztos, hogy ez igaz is, de ezt hallottam, és elhittem :-)
>
> Most gondoltam megnézem, mi is ennek a hitemnek az alapja.
> Írtam egy ilyen osztályt:
>
>
> public class ForTest {
> void test1() {
> for (int i=0; i<10; ++i) {
> System.out.println(i);
> }
> }
>
> void test2() {
> for (int i=0; i<10; i++) {
> System.out.println(i);
> }
> }
> }
>
>
> Lefordítottam, és javap-pal visszafejtve azt tapasztaltam, hogy mind a
> két függvény ugyanarra a kódra fordul:
>
>
> void test1();
> Signature: ()V
> Code:
> 0: iconst_0
> 1: istore_1
> 2: iload_1
> 3: bipush 10
> 5: if_icmpge 21
> 8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
> 11: iload_1
> 12: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
> 15: iinc 1, 1
> 18: goto 2
> 21: return
>
> void test2();
> Signature: ()V
> Code:
> 0: iconst_0
> 1: istore_1
> 2: iload_1
> 3: bipush 10
> 5: if_icmpge 21
> 8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
> 11: iload_1
> 12: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
> 15: iinc 1, 1
> 18: goto 2
> 21: return
>
> Kioptimalizálja a fordító gondolom.
> Ezek szerint tök mindegy, hogy ++i vagy i++?
Nem, nem tok mindegy, mert mast csinal a ketto. :)
De sebesseg szempontjabol valoban tokmindegy.
lsp
További információk a(z) Javalist levelezőlistáról