[Java lista] for: ++i vagy i++?

Richard Oliver Legendi roante at freemail.hu
2009. Feb. 6., P, 12:01:01 CET


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++?

Ricsi


További információk a(z) Javalist levelezőlistáról